首页 > 其他分享 >设计模式实验

设计模式实验

时间:2023-11-27 09:26:37浏览次数:35  
标签:observer Observer void stockPrice 实验 设计模式 public name

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

 

实验 21:观察者模式

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

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

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

 
   

 


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

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

 

标签:observer,Observer,void,stockPrice,实验,设计模式,public,name
From: https://www.cnblogs.com/syhxx/p/17858433.html

相关文章

  • Java设计模式之命令模式
    命令模式介绍命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。下......
  • 编译原理实验
      熟了词法分析、语法分析、语义分析进行整合,构造完整的应用程序。熟悉了软件的重构。......
  • Meterpreter框架使用实验
     一.实验目的与配置了解漏洞复现的基本流程和方法熟悉永恒之蓝的漏洞原理及其利用熟悉Metasploit框架的使用及其相关的命令 二.实验环境Win7虚拟机一台,kali虚拟机一台 三.实验工具VMWare、NMap、Metasploit 四.实验步骤搭建测试环境,将kali作为攻击主机、win7_x......
  • 实验10:组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1. 类图如下  2. 源代码以及......
  • 实验9:桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 实验6:原型模式
    实验6:原型模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解原型模式的动机,掌握该模式的结构;2、能够利用原型模式解决实际问题。 [实验任务一]:向量的原型用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比......
  • 实验7:单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;  ......
  • 实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 对应的类图如下;  ......
  • 编译原理实验
       掌握了LR法进行语法分析的原理,掌握了语法分析器的设计与调试......
  • oracle数据库实验
       进行oracle数据库的学习,掌握数据的插入(INSERT)、修改(UPDATE)和删除(DELETE)操作。 掌握不同类型的数据查询(SELECT)操作。......