注意事项:
在观察者模式中,观察对象通知了观察者,而这个观察者同时也是一个观察对象,它会通知其它的观察者。因而常常会产生过于复杂的设计,并且使调试变得更加困难。当遇到这种情况时,Mediator(仲裁)模式可能会帮助我们改进这类代码。
根据经验建议,最多允许出现一个对象既是观察者也是观察对象,即消息最多转发一次(两次),否则逻辑关系就会比较复杂且难以维护。
如果观察者比较多,且处理时间比较长,虽然可以使用异步处理方式,但要考虑线程安全和队列问题。
当观察者与观察对象的关系是一对多时,一是使用多线程技术(异步),不管谁启动线程,都可以明显地提高系统性能。二是使用缓存技术(同步),但需要足够多的资源。
观察对象可以自己做主决定是否通知观察者,以达到减轻负担的目的。
MVC 框架是一个典型的观察者模式示例,Model 提供的数据是 View 的观察对象,发布者是 Model,订阅者是 View。Model 是指操作“不依赖于显示形式的内部模型”,View 是管理 Model“如何显示”的,通常一个 Model 对应多个 View。
下面将以 AM824ZB 开发板为载体展示 MVC 框架,当视图观察到模型生成的布尔类型value 值时,既可以通过 LED0 显示,也可以通过 zigbee 发送出去,使得可以无线value 的值。其用例描述如下:
在初始状态时,value 为 AM_FALSE, LED 熄灭,zigbee 发送“0”。当有键按下时,则 value 值为 AM_TRUE,LED 点亮,zigbee 发送“1”;当键再次按下时,则 value 值为AM_FALSE,LED0 熄灭,zigbee 发送“1”......如此周而复始。
其中,value 值对应于 Observer 模式中的模型, LED 和 zigbee 对应于 Observer 模式中的视图,Observer 模式描述了基本数据和它可能为数众多的用户界面元素之间的关系。
每份数据都被封装在一个 Subject 对象中;
与 Subject 对应的每个用户界面元素被封装在一个 Observer 对象中;
一个 Subject 同时可以有多个 Observer;
当一个 Subject 改变时,会通知它所有的 Observer;
Observer 也会从对应的 Subject 处获取相应的信息,并及时更新显示内容。
最终的信息存储在 Subject 中,当 Subject 中的信息发生变化时,Observer 会及时更新相应的显示内容。当用户保存数据时,其保存的是 Subject 中的信息,而 Observer 中的信息不需要保存,因为它们显示的信息来自对应的 Subject。
Observer 模式规定了单独的 Subject 类层次和 Observer 类层次,其中的抽象基类定义了通知的协议,以及用于添加(attach)和删除(detach)视图的 Observer 的接口。ConcreteSubject子类实现特定的接口,为了让具体的 Observer 知道什么东西发生了变化,它还需要增加相应的接口,同时 ConcreteObserver 子类通过它们的 update 操作指定如何对自己进行更新,从而以独一无二的方式显示它们的 Subject。
>>> 9.3.3 领域模型
1. 类模型
创建类模型的第一步就是从问题域寻找相关的对象类,类常常与名词对应,不要精挑细选,要记下所有可能的每个类。因为我们的目的是捕获概念,一方面并不是所有的名词都是概念,另一方面概念也会在语句的其它部分中得到体现。比如,暂定类为 value(bool 值)、key(按键)、LED(发光二极管)和 zigbee。然后通过共性和差异化分析,将它们归类到更广泛的范畴内。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-65228-3.html
叙利亚等
假货
歼-16可争夺海上制空权
感谢美帝让我军练兵
比如说今年10元一斤肉