设计模式复习-观察者模式
生活随笔
收集整理的这篇文章主要介绍了
设计模式复习-观察者模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#pragma once
#include "stdafx.h"
#include<set>
#include<list>
#include<string>
#include<iostream>
#include<windows.h>
using namespace std;//设计模式-观察者模式Observer
//定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象
//这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。class CObserver {//抽象接口
public:virtual void Update() = 0;
};class CSubject {//抽象通知者
private:set<CObserver *> m_HashMemory;
public:CSubject(){m_HashMemory.clear();}~CSubject() {for each(CObserver *i in m_HashMemory) {delete i;}}void Attach(CObserver *pObserver) {m_HashMemory.insert(pObserver);}void Detach(CObserver *pObserver) {m_HashMemory.erase(pObserver);delete pObserver;}void Notify() {for each(CObserver *i in m_HashMemory) {i->Update();}}
};class CConcreteSubjuct :public CSubject {//具体的通知着
private:string m_strSubjectState;
public:CConcreteSubjuct(const string &strName) {m_strSubjectState = strName;}string GetName() {return m_strSubjectState;}
};class ConcreteObserver :public CObserver{//具体的观察者
private:string m_strName;string m_strObserverState;CConcreteSubjuct *m_pSubject;
public:ConcreteObserver(CConcreteSubjuct *pSubject ,const string &strName) {m_pSubject = pSubject;m_strName = strName;}void Update() {m_strObserverState = m_pSubject->GetName();cout << "观察者" << m_strName << "的新状态是" << m_strObserverState << endl;}
};int main()
{//一个前台,几个员工CConcreteSubjuct *pQianTai = new CConcreteSubjuct("QianTai");ConcreteObserver *pYuanGongA = new ConcreteObserver(pQianTai ,"YuanGongA");ConcreteObserver *pYuanGongB = new ConcreteObserver(pQianTai, "YuanGongB");ConcreteObserver *pYuanGongC = new ConcreteObserver(pQianTai, "YuanGongC");pQianTai->Attach(pYuanGongA); pQianTai->Attach(pYuanGongB); pQianTai->Attach(pYuanGongC);pQianTai->Notify();pQianTai->Detach(pYuanGongB);pQianTai->Notify();getchar();return 0;
}
总结
以上是生活随笔为你收集整理的设计模式复习-观察者模式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 设计模式复习-建造者模式
- 下一篇: 设计模式复习-状态模式