首页 > 其他分享 >观察者模式

观察者模式

时间:2023-12-15 18:02:16浏览次数:32  
标签:observer void update 模式 观察者 notify subject

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。

1. 提交源代码;

2.	#include <iostream>
3.	#include <vector>
4.	using namespace std;
5.	
6.	//抽象观察者类
7.	class Observer{
8.	public:
9.	    virtual void up_update(){}
10.	    virtual void down_update(){}
11.	};
12.	//抽象物体类
13.	class Subject{
14.	protected:
15.	    vector<Observer*> ob;
16.	public:
17.	    void attach(Observer *observer){
18.	        ob.push_back(observer);
19.	    }
20.	    void detach(){
21.	        ob.pop_back();
22.	    }
23.	    virtual void notify(){}
24.	};
25.	//具体观察者类
26.	class PersonObserver: public Observer{
27.	public:
28.	    void up_update(){
29.	        cout<<"股票上涨,开始买股票"<<endl;
30.	    }
31.	    void down_update(){
32.	        cout<<"股票下跌,股民大哭"<<endl;
33.	    }
34.	};
35.	//具体物体来
36.	class ConcreteSubject: public Subject{
37.	private:
38.	    string state;
39.	public:
40.	    void setState(string state){
41.	        this->state = state;
42.	    }
43.	    void notify(){
44.	        for (int i=0; i<ob.size() ; i++) {
45.	            if(state=="上涨")
46.	                ob[i]->up_update();
47.	            else
48.	                ob[i]->down_update();
49.	        }
50.	    }
51.	};
52.	
53.	int main(){
54.	    ConcreteSubject *subject = new ConcreteSubject();
55.	    PersonObserver *observer = new PersonObserver();
56.	
57.	    subject->attach(observer);
58.	    subject->setState("上涨");
59.	    subject->notify();
60.	    subject->setState("下跌");
61.	    subject->notify();
62.	}
63.	

64. 提交类图;

标签:observer,void,update,模式,观察者,notify,subject
From: https://www.cnblogs.com/yzx-sir/p/17903909.html

相关文章

  • 状态模式
    [实验任务一]:银行账户用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。1. 提交源代码2. publicclassAccount3. {4. privateintuserID;//账号5. privateintpassword;//密码6. priv......
  • 迭代器模式
    迭代器提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。迭代器模式有两个角色,一个是迭代器,一个是聚合器,Java或则c#中的Collection,List,Set,Map就是聚合器。......
  • 命令模式
    命令模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式有三个角色,一个命令,二是命令接收者,三是命令调用者。像http请求,数据库sql命令都是常见的命令模式。命令模式的意图是将一个请求......
  • 模板方法模式
    模板方法模式是指定义一个操作中算法的骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下即可重定义该算法的某些特定步骤。模板方法主要有两个角色,一个抽象类模板,定义好骨架,第二是实现的子类,实现抽象类模板的抽象方法,和根据需要重写一些方法,其实这也是我......
  • 策略模式
    策略模式有两个主要角色,一个是主类,一个是策略类,通过主类的构造函数将策略类注入到主类,从而实现调用不同的策略。典型的例子就是收银策略,正常收费,八折、五折,满200减50等等。示例代码packagedesignMode.strategy;publicclassCashContext{privateCashSupercashSuper;......
  • 知识|基于混合模式的多余度飞控全数字仿真系统研究
    *余度(Redundancy):一种确保安全的设计手段,使得出现两个及以上故障时,才会引起既定不希望发生的工作状态。飞行控制软件主要完成飞行传感器数据处理、飞行姿态控制和余度管理任务,对保证飞机安全性和可靠性起着关键作用,但是现实中与飞行控制软件相关的研发测试过程依旧举步维艰。其主......
  • python 脚本的启动模式(python -m以模块方式启动)
    今天再看python的项目时,发现GitHub中给出的python脚本的执行格式是python-mpipinstallsomepackage。于是开始了python模式启动之旅。其中很多相关借鉴了该博客,同时感谢博主:http://www.cnblogs.com/xueweihan/p/5118222.html什么是python启动模块:通过python启动一个库中......
  • 适配器模式揭秘:让不兼容的组件完美协同
    前言从这篇文章开始来盘一盘结构型设计模式,在开始之前先来简单回顾一下创建型的设计模式有哪些,如果有兴趣,就来一起学习吧:设计模式之简单工厂模式工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客抽象工厂模式:角色解析与应用探索_凡夫编程的技术博客_51CTO博客设计......
  • SaaS模式相比传统CRM系统有哪些优势?为什么成为行业主流
     在数字化时代,选择适合企业的客户关系管理系统(CRM)至关重要。传统CRM系统曾是企业的重要选择,但随着基于互联网的SaaS模式的兴起,越来越多的企业开始转向SaaSCRM。本文将对比传统CRM系统和SaaSCRM,并解答一些常见问题。一、传统CRM系统的局限性传统CRM系统通常需要企业购买和维......
  • 小谈设计模式(21)—迭代器模式
    (小谈设计模式(21)—迭代器模式)专栏介绍主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。迭代器模式迭代器模式是一种行为型设计模式,它提供了一种访问聚合对象中各个元素的方法......