设计模式之Observer模式(C++实现) (二)

2014-11-24 02:34:39 · 作者: · 浏览: 3
it != m_ObserverList.end();++it)
(*it)->update(context);
}
void HaveBreakfast() //秘书的行为
{
cout<<"美女秘书:开始吃饭去了,饿了啦"< this->NotifyObservers(string("开始吃饭去了,饿了啦"));
}
void HaveFun() //秘书的行为
{
cout<<"美女秘书:人家好想去玩啊!"< this->NotifyObservers(string("人家好想去玩啊!"));
}
};


class IObserver //观察者接口
{
public:
IObserver() {}
virtual ~IObserver() {};

virtual void update(string context) = 0;
};

class CCoderAObserver:public IObserver //程序员A继承并实现update
{
private:
string name;
public:
CCoderAObserver()
{
name = "Coder A";
}

virtual void update(string context)
{
//收到消息:我好想去玩,或者去吃饭
//执行相应的操作
}
};

class CCoderBObserver:public IObserver //程序员B并实现update
{
private:
string name;
public:
CCoderBObserver()
{
name = "Coder B";
}

virtual void update(string context)
{
//收到消息:我好想去玩,或者去吃饭
//执行相应的操作
}
};

class IObservable //被观察者接口
{
IObservable() {}
virtual ~IObservable() {}

virtual void AddObserver(IObserver *pObserver) = 0; //所有被观察者都有的操作
virtual void DeleteObserver(IObserver *pObserver) = 0;
virtual void NotifyObservers(string context) = 0;

};

class CmishuObservable:public IObservable //秘书继承并实现了接口的函数
{
private:
vector m_ObserverList; //用于盛装观察者的容器
typedef vector::iterator Observer_iter;

public:

virtual void AddObserver(IObserver *pObserver)
{
m_ObserverList.push_back(pObserver); //把观察者加入到容器中
}
virtual void DeleteObserver(IObserver *pObserver) //删除观察着
{
Observer_iter it = m_ObserverList.begin();
for(;it!= m_ObserverList.end();++it)
{
if(pObserver == *it) //这里有点处理得不好,不该比指针,权当例子吧
m_ObserverList.erase(it);
}
}

virtual void NotifyObservers(string context) //通告观察者,以便执行更新
{
Observer_iter it = m_ObserverList.begin();
for(;it != m_ObserverList.end();++it)
(*it)->update(context);
}
void HaveBreakfast() //秘书的行为
{
cout<<"美女秘书:开始吃饭去了,饿了啦"< this->NotifyObservers(string("开始吃饭去了,饿了啦"));
}
void HaveFun() //秘书的行为
{
cout<<"美女秘书:人家好想去玩啊!"< this->NotifyObservers(string("人家好想去玩啊!"));
}
};


class IObserver //观察者接口
{
public:
IObserver() {}
virtual ~IObserver() {};

virtual void update(string context) = 0;
};

class CCoderAObserver:public IObserver //程序员A继承并实现update
{
private:
string name;
public:
CCoderAObserver()
{
name = "Coder A";
}

virtual void update(string context)
{
//收到消息:我好想去玩,或者去吃饭
//执行相应的操作
}
};

class CCoderBObserver:public IObserver //程序员B并实现update
{
private:
string name;
public:
CCoderBObserver()
{
name = "Coder B";
}

virtual void update(string context)
{
//收到消息:我好想去玩,或者去吃饭
//执行相应的操作
}
};