2024.11.29

设计模式实验二十一

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

 

实验 21:观察者模式

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

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

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

 
   

 

 

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

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

实验要求:

1.     画出对应类图;

 

 

2.     提交源代码;

// Observer.java(接口层)

public interface Observer {

    void moneyUp();   // 当股票价格上涨时触发

    void moneyDown(); // 当股票价格下跌时触发

}

//Investor.java

public class Investor implements Observer {

    private String name;

 

    public Investor(String name) {

        this.name = name;

    }

 

    @Override

    public void moneyUp() {

        System.out.println(name + " 购买更多股票!");

    }

 

    @Override

    public void moneyDown() {

        System.out.println(name + " 痛哭一场!");

    }

}

//Subject.java

import java.util.ArrayList;

 

public class Subject {

    private ArrayList<Observer> obs = new ArrayList<>();

 

    // 添加观察者

    public void add(Observer observer) {

        obs.add(observer);

    }

 

    // 移除观察者

    public void remove(Observer observer) {

        obs.remove(observer);

    }

 

    // 通知所有观察者股票价格下跌

    public void down() {

        System.out.println("股票价格下跌!");

        for (Observer observer : obs) {

            observer.moneyDown();

        }

    }

 

    // 通知所有观察者股票价格上涨

    public void up() {

        System.out.println("股票价格上涨!");

        for (Observer observer : obs) {

            observer.moneyUp();

        }

    }

}

//Stock.java

public class Stock extends Subject {

    // 当股票价格下降时触发

    public void down() {

        super.down();

    }

 

    // 当股票价格上涨时触发

    public void up() {

        super.up();

    }

}

//Main.java

public class Main {

    public static void main(String[] args) {

        // 创建股票对象

        Stock stock = new Stock();

 

        // 创建股民(观察者)

        Investor investor1 = new Investor("张三");

        Investor investor2 = new Investor("李四");

        Investor investor3 = new Investor("王五");

 

        // 将股民注册为观察者

        stock.add(investor1);

        stock.add(investor2);

        stock.add(investor3);

 

        // 股票价格下跌

        stock.down();

 

        System.out.println();

 

        // 股票价格上涨

        stock.up();

    }

}

3.     注意编程规范。

 

 

posted @ 2024-12-25 10:24  cvjj  阅读(3)  评论(0)    收藏  举报