
观察者模式是指行为设计模式。
该模式允许您使用通用接口将对象状态的更改发送给订阅者。
假设我们正在为程序员开发一个信使,我们在应用程序中有一个聊天屏幕。当您收到包含“问题”和“错误”或“出现问题”文本的消息时,您需要将错误列表屏幕和设置屏幕设置为红色。
接下来,我将描述解决该问题的两种选择,第一种很简单,但极难支持,第二种支持更稳定,但需要你在最初的实施过程中转过头来。
公共巴士
该模式的所有实现都包含数据更改时发送消息、订阅消息以及方法中的进一步处理。共享总线选项包含一个将消息分派给接收者的单个对象(通常是单例)。
实现的简单性如下:
- 对象向共享总线发送抽象消息
- 订阅共享总线的另一个对象捕获该消息并决定是否处理它。
Apple 提供的实现选项之一(NSNotificationCenter 子系统)添加了消息头与收件人在传递时调用的方法名称的匹配。
这种方法的最大缺点是——如果您进一步更改消息,则需要首先记住并手动编辑处理和发送该消息的所有位置。有一种情况是快速初始实施,然后是长期、复杂的支持,需要知识库才能正确操作。
多播委托
在这个实现中,我们将创建最终的多播委托类;就像共享总线的情况一样,对象可以订阅它来接收“消息”或“事件”,但解析和过滤消息的工作是未分配给对象。相反,订阅者类必须实现委托的多播方法来通知它们。
这是通过使用委托接口/协议来实现的;当通用接口发生变化时,应用程序将不再构建,此时需要重做所有处理给定消息的地方,而不需要维护单独的知识库记住这些地方。 编译器是你的朋友。
这种方法提高了团队的生产力,因为不需要编写或存储文档,新开发人员不需要尝试理解消息及其参数是如何处理的,而是使用方便且易于理解的界面,这就是通过代码实现文档范式的方式。
多播委托本身基于委托模式,我将在下一篇文章中介绍它。
来源
https://refactoring.gu/ru/design-patterns/observer