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

博客围绕观察者模式展开,但具体内容缺失。观察者模式是程序设计中重要概念,在软件系统开发等信息技术领域有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值