北川广海の梦

北川广海の梦

设计模式:外观模式与观察者模式

2021-11-02

观察者模式

通过观察者模式,允许我们创建一种订阅机制,当某种特定事件发生的时候,通知多个订阅这个对象的其他对象。
实现方式可参考:如何在java实现事件这篇文章。
在C#中,可以直接通过委托与event便捷实现。这里不再赘述。

观察者模式非常类似于发布-订阅模式,但是两者是存在区别的。

观察者模式存在两类对象,分别是观察者与目标,二者之间是耦合的。目标清晰的知道有哪些对象在观察自己,它才能在事件发生的时候去通知到。而观察者必须知道自己正在观察谁,才能对事件做出正确的处理。

而发布订阅模式存在三类对象,分别是生产者,消费者,事件中心。生产者和消费者是解耦的。它们无需关心对方的存在,相反他们只关心事件中心。生产者只负责不断的产生消息,并将其发布到事件中心,由事件中心去处理谁会接到这个消息。消费者要做的也仅仅是从事件中心接到消息,并且做出处理,而不会关心事件是谁发出的。

外观模式

外观模式能够为包含许多复杂内部结构的子系统,提供一个简单的访问接口。相比直接调用各种子系统,它提供了较少的功能,却大大减轻了使用的复杂度。

我们通过在子系统的现有基础上,提供一个更简单的接口,然后通过一个外观类实现这个接口。

适配器模式的区别:
适配器模式通常只包装一个对象,使这个对象的能够“映射”到另一个接口。
而外观类往往最大的作用就是通过封装来屏蔽一系列较为复杂的实现,使整个子系统达到易用的目的。