设计模式复习-观察者模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式复习-观察者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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;
}
?
總結
以上是生活随笔為你收集整理的设计模式复习-观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式复习-建造者模式
- 下一篇: 设计模式复习-状态模式