欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

设计模式复习-观察者模式

发布时间:2025/6/17 asp.net 15 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设计模式复习-观察者模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

#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; }

 

总结

以上是生活随笔为你收集整理的设计模式复习-观察者模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。