观察者模式在交通信号系统中的应用
2017-10-21温立辉
温立辉
摘 要:针对交通信号系统中信号灯与控制中心的耦合问题,讨论了观察者模式的思想原理以及类组成结构,阐述观察者模式的适用场景;同时分析了观察者模式如何应用在交通信号系统中,进一步提升信号灯的合理性与灵活性。
关键词:观察者;订阅;发布;主题;通知
观察者模式(Publish/Subscribe)是一种行为模式,适用于多对象信息系统的交互场景中,其能有效的降低主题与对象间的依赖关系,解耦模块间的耦合程度,进一步提升编程语言的抽象能力。
1 认识观察者模式
观察者模式作为一種解耦模式,是行为模式中的典范,其核心要素是主题类,也称为模式中心,其一举一动都会影响相关的追随者—订阅类,其行为体现了一种广播式的传递效应。
在图1中可以看到,该模式由四部分组成,分别是:主题、订阅者以及两个抽象基类的实现子类,每个部分具体功能结构描述如下。
1.1 抽象主题(Subject)
各具体主题类的继承类,定义了注册监听主题的方法(register),还存在發布主题更改的方法(publishNotice),具体的主题类实现由子类定义。
1.2 具体主题(ConcreteSubject)
抽象主题类的一个实现子类,负责定义具体的主题,需实现父类主题的定义方法(setNotice)。
1.3 抽象观察者(Observer)
抽象观察者父类是所有观察者对外交互的门面,本类中需定义一个抽象的接收通知方法(receiveNotice),在抽象主题类中需引入该类型,作为对观察者的操作引用。
1.4 具体观察者(ConcreteObserver)
抽象观察者的一个实现子类,在主题状态发生变化时,负责接收消息更改具体观察者自身的状态,需实现父类中receiveNotice方法。
2 在信号系统中应用
观察者模式最典型的应用就是交通信号系统中,在该系统中有信号控制中心与为数众多的信号灯。当信号控制中心发出对应的信号变换指令时,所有信号指示灯都需变更自身信号指示,也就是当信息控制中心这一主题发生变化时,所有的观察者对象(信号灯)都要更改自身的状态,如图2所示。
完成以上4步,就基本上实现了信号系统的主体结构,其余只完成相应的细节,加上如界面组件及监听控制等方面即可。
3 结语
将一个系统分割成众多的协作类增加了程序的灵活度,但同时也带来负面影响,那就是需要维护分割出来后对象之间的一致性。在交通信号系统中,恰如其分的使用了订阅/发布这一行为模式而有效降低了指挥中心与信号灯的耦合,极大的提高了系统的灵活性与装配能力。
参考文献:
[1] 刘凌云.观察者模式在面向抽象编程中的应用[J].计算机与数字工程,2016,44(8):1474-1477,1522.
[2] 欧阳宏基,杨卫忠,赵蔷.观察者模式在Java事件处理中的应用研究[J].微处理机,2013,34(4):77-79.
[3] 吴清寿.基于事件机制的观察者模式及应用[J].重庆理工大学学报:自然科学版,2012,26(9):100-104.