zoukankan      html  css  js  c++  java
  • 观察者模式——C++实现

    问题描述:

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

    类图:

    C++源代码:

    #include<iostream>
    #include<list>
    #include<string>
    using namespace std;
    //抽象观察者
    class Observer{
    protected:
    	string name;
    public:
    	virtual void buy()=0;
    	virtual void cry()=0;
    };
    //具体观察者
    class Gumin:public Observer{
    public:
    	Gumin(string name){
    		this->name=name;
    	}
    	void buy(){
    		cout<<"股民"<<name<<"买了一些股票"<<endl;
    	}
    	void cry(){
    		cout<<"股民"<<name<<"哭了"<<endl;
    	}
    };
    //抽象主题类
    class Subject{
    protected:
    	list<Observer*> observers;
    public:
    	void attach(Observer *obs){
    		observers.push_back(obs);
    	}
    	void detach(Observer *obs){
    		observers.remove(obs);
    	}
    	virtual void up()=0;
    	virtual void down()=0;
    };
    //具体主题类
    class Gufen:public Subject{
    public:
    	void up(){
    		cout<<"*****股份上涨5%*****"<<endl;
    		list<Observer*>::iterator iter = observers.begin();
    		for(; iter != observers.end(); iter++)
    			(*iter)->buy();
    	}
    	void down(){
    		cout<<"*****股份下跌5%*****"<<endl;
    		list<Observer*>::iterator iter = observers.begin();
    		for(; iter != observers.end(); iter++)
    			(*iter)->cry();
    	}
    };
    //测试函数
    int main(){
    	Observer *obs1,*obs2;
    	obs1=new Gumin("小张");
    	obs2=new Gumin("小王");
    	Subject *sub;
    	sub=new Gufen();
    	sub->attach(obs1);
    	sub->attach(obs2);
    	sub->up();
    	sub->down();
    }
    

      

    运行结果:

  • 相关阅读:
    codeforces 1295 题解(完结)
    Leetcode 第 173 场周赛 题解(完结)
    P2564-[USACO12MAR]花盆Flowerpot
    Task 1-2
    LeetCode--169--多数元素(python)
    049字符异位词分组(python)
    矩阵路径(python)
    全排列
    滑动窗口最大值leetcode & nowcoder(python)
    取topK
  • 原文地址:https://www.cnblogs.com/znjy/p/15586493.html
Copyright © 2011-2022 走看看