12.2日报

今天完成软件设计实验二十一观察者模式,并且进一步学习了画数据流图,功能架构图

实验 21:观察者模式

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

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

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

 
   

 

 

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

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

实验要求:

1.     画出对应类图;

 

2.     提交源代码;

  1. import java.util.ArrayList;
    import java.util.List;

    // 观察者接口
    interface Observer {
        void update(float price);
    }

    // 具体观察者
    class ConcreteObserver implements Observer {
        private String name;

        public ConcreteObserver(String name) {
            this.name = name;
        }

        @Override
        public void update(float price) {
            if (price > 0) {
                buyStock();
            } else {
                cry();
            }
        }

        private void buyStock() {
            System.out.println(name + " 听到价格上涨,买了股票!");
        }

        private void cry() {
            System.out.println(name + " 听到价格下降,大哭了一场!");
        }
    }

    // 主题接口
    interface Subject {
        void attach(Observer o);
        void detach(Observer o);
        void notifyObservers();
    }

    // 具体主题
    class ConcreteSubject implements Subject {
        private List<Observer> observers = new ArrayList<>();
        private float price;

        @Override
        public void attach(Observer o) {
            observers.add(o);
        }

        @Override
        public void detach(Observer o) {
            observers.remove(o);
        }

        @Override
        public void notifyObservers() {
            for (Observer observer : observers) {
                observer.update(price);
            }
        }

        public void setPrice(float price) {
            this.price = price;
            notifyObservers();
        }

        public float getPrice() {
            return price;
        }
    }

    // 客户端代码
    public class ObserverPatternDemo {
        public static void main(String[] args) {
            ConcreteSubject stock = new ConcreteSubject();

            Observer alice = new ConcreteObserver("Alice");
            Observer bob = new ConcreteObserver("Bob");

            stock.attach(alice);
            stock.attach(bob);

            stock.setPrice(105); // 价格上涨5%
           
    stock.setPrice(95);  // 价格下降5%
       
    }
    }

 

4.     注意编程规范。

 

 

posted @ 2024-12-13 10:30  Code13  阅读(10)  评论(0)    收藏  举报