软件设计:实验 21:观察者模式

实验 21:观察者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解观察者模式的动机,掌握该模式的结构;

2、能够利用观察者模式解决实际问题。

 

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

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

实验要求:

1. 画出对应类图;

2. 提交源代码;

3. 注意编程规范。

1.

 

2.// 观察者接口

interface Observer {

    void update();

}

 

// 具体观察者

class Investor implements Observer {

    private String name;

 

    public Investor(String name) {

        this.name = name;

    }

 

    @Override

    public void update() {

        System.out.println(name + " received the stock price update.");

    }

}

 

// 主题接口

interface Subject {

    void attach(Observer o);

    void detach(Observer o);

    void notify();

}

 

// 具体主题

class Stock implements Subject {

    private float price;

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

 

    public void attach(Observer o) {

        observers.add(o);

    }

 

    public void detach(Observer o) {

        observers.remove(o);

    }

 

    public void notify() {

        for (Observer observer : observers) {

            observer.update();

        }

    }

 

    public void setPrice(float price) {

        this.price = price;

        // 假设价格变化超过5%则通知观察者

        if (Math.abs(this.price - price) > 0.05 * this.price) {

            notify();

        }

    }

}

 

public class ObserverPatternDemo {

    public static void main(String[] args) {

        Stock stock = new Stock();

 

        Investor investor1 = new Investor("Investor 1");

        Investor investor2 = new Investor("Investor 2");

 

        stock.attach(investor1);

        stock.attach(investor2);

 

        stock.setPrice(100.0f); // 初始价格

        stock.setPrice(105.0f); // 价格上涨5%,通知观察者

        stock.setPrice(95.0f);  // 价格下降5%,通知观察者

    }

}

 

posted @ 2024-12-01 19:45  痛苦代码源  阅读(6)  评论(0编辑  收藏  举报