设计模式——观察者模式的双解耦实现

观察者模式是一种让多个对象实时观察某一对象状态变化的设计模式。本文介绍了其基本概念,包括观察者如何在主题对象中登记、删除,以及主题对象如何通知观察者。通过UML图展示了模式结构,并强调了双解耦的概念,即抽象的Observer和Subject接口使得具体观察者和主题能灵活扩展。文章最后提到了代码实现。

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

定义

什么是观察者模式?观察者模式通俗的理解就是多个对象(观察者)“实时”观察某个对象(主题对象)。一旦这个被观察的对象状态发生了变化或者产生了某种事件,就会依次通知所有正在观察该对象的观察者,让他们能主动且及时应对状态(或事件)的发生。

1)观察者要想得主题对象的通知,必须在主题对象那里登记——添加观察者。

2)观察者不想继续得到主题对象的通知的时候,主题对象应该将其从自己的登记表中去除——删除观察者。

3)主题对象一般需要一个动态的容器作为登记表记录多个观察者,容器一般可以是vector、list。map等。

4)当主题对象的状态发生变化的时候要做的就是遍历该容器,“通知”容器中所有观察者(即调用某个观察者的事件处理函数)。

UML图


标题中的双解耦,其实就是定义了抽象的观察者Observer和抽象的主题Subject。然后让具体的观察者和具体的主题继承抽象接口。这样做的好处有两点:

1)抽象的Observert可以继承很多不同类的观察者,如观察者一想要得到“何时吃饭”的通知,观察者二想要得到“何时考试”通知

2)抽象的Subject可以继承不同类的主题(即通知者),如通知者是“妈妈”或者通知者是“老师”。

代码:

class Observer
{
    protected:
    Subject &subject;
    public:
    Observer(Subje
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值