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();
    }
    

      

    运行结果:

  • 相关阅读:
    剑指offer:二进制中1的个数
    剑指offer:反转链表
    剑指offer:链表中倒数第k个结点
    剑指offer:调整数组顺序使奇数位于偶数前面
    剑指offer:矩形覆盖
    剑指offer:变态跳台阶
    剑指offer :跳台阶
    剑指offer:旋转数组的最小数字
    剑指offer:用两个栈实现队列
    剑指offer:重建二叉树
  • 原文地址:https://www.cnblogs.com/znjy/p/15586493.html
Copyright © 2011-2022 走看看