实验 21:观察者模式

发布时间 2024-01-09 15:10:38作者: wardream

 


[实验任务一]:股票提醒

当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。

实验要求:

1.      提交源代码;

package test21;

 

// 观察者接口,股民

interface Observer {

    void update(double price);

}

 

 

 

package test21;

 

 

 

// 具体观察者,股民

 

class StockInvestor implements Observer {

 

    private String name;

 

 

 

    public StockInvestor(String name) {

 

        this.name = name;

 

    }

 

 

 

    @Override

 

    public void update(double price) {

 

        if (price > 0) {

 

            System.out.println(name + "收到消息:股票价格上涨,赶紧买入!");

 

        } else {

 

            System.out.println(name + "收到消息:股票价格下跌,大哭一场!");

 

        }

 

    }

 

}

 

 

package test21;

 

 

 

// 主题接口,被观察的对象

 

interface Subject {

 

    void addObserver(Observer observer);

 

    void removeObserver(Observer observer);

 

    void notifyObservers(double price);

 

}

 

 

package test21;

 

 

 

import java.util.ArrayList;

 

import java.util.List;

 

 

 

// 具体主题,股票价格

 

class StockPrice implements Subject {

 

    private double currentPrice;

 

    private List<Observer> observers = new ArrayList<>();

 

 

 

    @Override

 

    public void addObserver(Observer observer) {

 

        observers.add(observer);

 

    }

 

 

 

    @Override

 

    public void removeObserver(Observer observer) {

 

        observers.remove(observer);

 

    }

 

 

 

    @Override

 

    public void notifyObservers(double price) {

 

        for (Observer observer : observers) {

 

            observer.update(price);

 

        }

 

    }

 

 

 

    public void setPrice(double newPrice) {

 

        if ((newPrice - currentPrice)>= 0.05 * currentPrice) {

 

            currentPrice = newPrice;

 

            notifyObservers(currentPrice);

 

        }else {

 

            notifyObservers(-1);

 

        }

 

    }

 

}

 

 

package test21;

 

 

 

// 测试

 

public class Main {

 

    public static void main(String[] args) {

 

        StockPrice stockPrice = new StockPrice();

 

 

 

        StockInvestor investor1 = new StockInvestor("王某");

 

        StockInvestor investor2 = new StockInvestor("李某");

 

 

 

        stockPrice.addObserver(investor1);

 

        stockPrice.addObserver(investor2);

 

 

 

        // 模拟股票价格变化

 

        stockPrice.setPrice(100.0);

 

        stockPrice.setPrice(1.0);

 

        stockPrice.setPrice(110.0);

 

    }

 

}

2.      提交类图;

 

3.      注意编程规范。