[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=13770720612900404&size=800_600&devtype=web&v=1.0.1&rtick=14676146421852&share_qid=108635719&sign=5210d831b39034c6fc6a49190a6591df&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145759477103&size=800_600&devtype=web&v=1.0.1&rtick=14676146454071&share_qid=108635719&sign=ea206f168912ae7216f147afd0bdfff6&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145759472750&size=800_600&devtype=web&v=1.0.1&rtick=14676146453660&share_qid=108635719&sign=56e29af3cbbf4aba444d07bf683b477c&[/img]
[color=red][b]头文件[/b][/color]
[color=red][b]实现[/b][/color]
[color=red][b]客户端[/b][/color]
运行结果
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145999495798&size=800_600&devtype=web&v=1.0.1&rtick=14676146451596&share_qid=108635719&sign=d268bb146998dc136215ca08d58fe801&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145759477103&size=800_600&devtype=web&v=1.0.1&rtick=14676146454071&share_qid=108635719&sign=ea206f168912ae7216f147afd0bdfff6&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145759472750&size=800_600&devtype=web&v=1.0.1&rtick=14676146453660&share_qid=108635719&sign=56e29af3cbbf4aba444d07bf683b477c&[/img]
[color=red][b]头文件[/b][/color]
//ObserverPattern.h
#ifndef OBSERVER_PATTERN_H
#define OBSERVER_PATTERN_H
#include <Windows.h>
#include <iostream>
#include <list>
using namespace std;
namespace ObserverPattern
{
class Observer
{
public:
virtual void Update(int) = 0;
};
class Subject
{
public:
virtual void Attach(Observer *) = 0;
virtual void Detach(Observer *) = 0;
virtual void Notify() = 0;
};
class ConcreteObserver : public Observer
{
public:
ConcreteObserver(Subject *pSubject) : m_pSubject(pSubject){}
void Update(int value)
{
cout<<"ConcreteObserver get the update. New State:"<<value<<endl;
}
private:
Subject *m_pSubject;
};
class ConcreteObserver2 : public Observer
{
public:
ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject){}
void Update(int value)
{
cout<<"ConcreteObserver2 get the update. New State:"<<value<<endl;
}
private:
Subject *m_pSubject;
};
class ConcreteSubject : public Subject
{
public:
void Attach(Observer *pObserver);
void Detach(Observer *pObserver);
void Notify();
void SetState(int state)
{
m_iState = state;
}
private:
std::list<Observer *> m_ObserverList;
int m_iState;
};
//
void ObserverPattern_Test();
}
#endif
[color=red][b]实现[/b][/color]
#include "ObserverPattern.h"
namespace ObserverPattern
{
void ConcreteSubject::Attach(Observer *pObserver)
{
m_ObserverList.push_back(pObserver);
}
void ConcreteSubject::Detach(Observer *pObserver)
{
m_ObserverList.remove(pObserver);
}
void ConcreteSubject::Notify()
{
std::list<Observer *>::iterator it = m_ObserverList.begin();
while (it != m_ObserverList.end())
{
(*it)->Update(m_iState);
++it;
}
}
//
void ObserverPattern_Test()
{
// Create Subject
ConcreteSubject *pSubject = new ConcreteSubject();
// Create Observer
Observer *pObserver = new ConcreteObserver(pSubject);
Observer *pObserver2 = new ConcreteObserver2(pSubject);
// Change the state
pSubject->SetState(2);
// Register the observer
pSubject->Attach(pObserver);
pSubject->Attach(pObserver2);
pSubject->Notify();
// Unregister the observer
pSubject->Detach(pObserver);
pSubject->SetState(3);
pSubject->Notify();
delete pObserver;
delete pObserver2;
delete pSubject;
}
}
[color=red][b]客户端[/b][/color]
#include "ObserverPattern.h"
using namespace ObserverPattern;
void main()
{
ObserverPattern_Test();
}
运行结果
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145999495798&size=800_600&devtype=web&v=1.0.1&rtick=14676146451596&share_qid=108635719&sign=d268bb146998dc136215ca08d58fe801&[/img]