11.22

软件设计                  石家庄铁道大学信息学院

 

实验 21:观察者模式

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

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

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

 

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

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

实验要求:

1. 类图;

 

 

2. 源代码;

①、MySubject.java

package org.example.shiyanershiyi;


import java.util.ArrayList;

public abstract class MySubject {

    protected ArrayList<MyObserver> observers = new ArrayList<MyObserver>();

    //注册方法
    public void attach(MyObserver observer) {

        observers.add(observer);

    }

    //注销方法
    public void detach(MyObserver observer) {

        observers.remove(observer);

    }

    //抽象通知方法
    public abstract void change(int rate);

}

 

②、MyObserver.java

package org.example.shiyanershiyi;

public interface MyObserver {

    void response(int rate);
}

 

③、Holder.java

package org.example.shiyanershiyi;


public class Holders implements MyObserver {

    public void response(int rate) {

        if (rate >= 5) {

            System.out.println("股票上涨,买买买");

        } else if (rate <= -5) {

            System.out.println("股票下跌,大哭一场");

        } else {

            System.out.println("股票比较稳定,还好还好");

        }

    }

}

 

④、Stock.java

package org.example.shiyanershiyi;

public class Stock extends MySubject {
    public void change(int rate) {
        for (Object obs : observers) {
            ((MyObserver) obs).response(rate);
        }
    }
}

 

⑤、Client.java

package org.example.shiyanershiyi;

public class Client {
    public static void main(String args[]) {
        MySubject subject = new Stock();
        MyObserver obs1;
        obs1=new Holders();
        subject.attach(obs1);
        System.out.println("****股票上涨****");
        subject.change(5);
        System.out.println("");
        System.out.println("****股票下跌****");
        subject.change(-5);
        System.out.println("");
        System.out.println("****股票稳定****");
        subject.change(4);
        System.out.println("");
    }
}

 

3. 运行结果

 

 

 

 

posted @ 2024-12-18 17:50  七安。  阅读(3)  评论(0编辑  收藏  举报