随笔 - 132  文章 - 0  评论 - 1  阅读 - 4578

实验 21:观察者模式

 


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

当股票的价格上涨或下降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.      注意编程规范。

 

 

posted on   wardream  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示