天天看点

Aha!设计模式(108)-行为模式讨论

不同的信息传递路径

当多个节点之间需要通信时,如果是在各个节点之间建立通讯渠道,会导致通信渠道的几何级数增加。这时使用Mediator设计模式提供一个通信的中心节点,可以有效地防止通信渠道的复杂化。这时的通信拓扑结构可以认为是一个星型结构。在这种情况下,有且只有中心节点和所有通信对象,都存在耦合关系。

使用Observer设计模式可以提供一个一对多的通信渠道。只要观察者事先进行登录,就可以以一种非耦合的方式建立合适的通信渠道。这时的通信拓扑结构是一种扇形结构。

职责链模式经常会依附于某个已知的数据结构,例如树状机构。信息可以按照事先约定的原则沿着一个链状路径传播。传播路径上的节点可以选择处理这个消息,也可以将该消息继续传播。

命令还是策略

无论是结构图还是代码,命令和策略模式都具有很大的相似性。策略模式的含义可以从名称窥探一二。策略应该看作是达成同一个目的的不同方法,而命令则意味着连做什么事情都不同了。还有一点,由于目的的一致性,策略模式需要的信息也会大致相同。而命令模式由于目的之间没有必然的关系,必然导致处理所需的信息也会存在很大的不同。另外,命令模式可能还意味着请求的传递和处理是存在分工的。

状态和访问者

无论是从使用场景还是模式结构,这两个模式都存在着很大的不同。它们的相似之处是二者都是对既有代码结构的重构。状态模式将被各种条件判断分离的处理内容集中在一个状态类中,而访问者模式是将完成同一个任务的针对不同对象的操作集中在同一个访问者类中。二者共同的好处是增强了扩展性;共通的缺点是分割了原有的处理流程,理解起来会多费一些周折。这是一种更高层次的相似性,其中的想法很值得理解和借鉴。

继续阅读