• 观察者模式——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();
    }
    

      

    运行结果:

  • 相关阅读:
    程序员如何开始新的工作(转)
    Dom4j和Xpath(转)
    单例模式(Singleton)Holder
    请慎用java的File#renameTo(File)方法(转)
    How to append files to a .tar archive using Apache Commons Compress?(转)
    FindWindow使用方法
    sqlplus登录、连接命令
    hdu1217Arbitrage--解题报告
    String.Split()函数
    iOS_10_tableView的简单使用_红楼十二钗
  • 原文地址:https://www.cnblogs.com/znjy/p/15586493.html
Copyright © 2020-2023  润新知