观察者模式

发布时间 2023-12-15 17:52:45作者: YE-

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
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. 提交类图;