cocos2dx 监听者模式

#ifndef __LuckyEgg_V2_1__Observer__
#define __LuckyEgg_V2_1__Observer__

#include <iostream>
#include <list>
#include <map>

using namespace std;
using std::list;

class MySubject;
//观察者
class Observer
{
  public:
    Observer(){}
    virtual ~Observer(){}
    virtual void Update(const std::string& message_type, MySubject* subject) = 0;
};

//目标
class MySubject
{
  public:
    MySubject(){}
    virtual ~MySubject(){}
    void Attach(const std::string& message_type, Observer *observer){ m_observers[message_type].push_back(observer);}//添加观察者
    void Remove(const std::string& message_type, Observer *observer){ m_observers[message_type].remove(observer);}//移除观察者

    void Notify(const std::string& message_type) //通知观察者
    {
      list<Observer*>::iterator iter = m_observers[message_type].begin();
      for (; iter != m_observers[message_type].end(); iter++) {
	(*iter)->Update(message_type, this);
      }
    }
    virtual void SetStatus(string s) = 0;//设置状态
    virtual string GetStatus() = 0;//获得状态

  private:
    map<std::string, list<Observer*> >m_observers;//观察者列表
  protected:
    string m_status;//状态
};

#endif /* defined(__LuckyEgg_V2_1__Observer__) */

猜你喜欢

转载自zhuangshuo.iteye.com/blog/1935179
今日推荐