我们在前面的文章中已经介绍了一些软件的设计模式,并给出了一些非软件的例子。下面,让我们继续完成软件设计模式的探索,来看看这些模式中的行为模式及实例。
行为模式
职责链(Chain of Responsibility)举例
职责链模式使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。机械硬币分拣银行使用职责链。这里并不是为每一种硬币分配一个滑槽,而是仅使用一个滑槽。当硬币落下时,硬币被银行内部的机械导向至适当的接收盒。
解释器(Interpreter)举例
解释器模式定义了特定语言的文法表示和解释该文法的解释器。音乐家是解释器的例子。音阶和它的持续时间可以用五线谱上的符 表示。这些符 就是音乐语言[14]。音乐家按照乐谱演奏,就可以反复重现同样的音乐。
中介者(Mediator)举例
中介者模式用一个中介对象来控制一系列的对象交互。通过中介者实现各个对象之间的松散耦合,而不是彼此直接作用。机场的控制塔很好地演示了这种模式。降落或者起飞的飞机直接与塔台通讯,而不是彼此间直接通讯。谁可以起飞或降落是由塔台决定的。这里需要注意的是塔台并不控制整个飞行过程。它只负责飞机在机场附近的区域。
观察者(Observer)模式
观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。
策略(Strategy)模式
策略模式定义了一系列可以相互替换的算法。不同的到飞机场去的方式就是一个策略模式的例子。有几种选择:自己开车、坐出租车、乘机场班车、乘公共汽车或使用专车服务等等。对于某些机场,地铁和直升机也是可能的选择。任何一种方式都可以把你送到机场,它们可以相互代替。你必须根据价格、便利性和时间做出选择。
访问者(Visitor)举例
访问者模式表示一个作用于对象结构中各元素的操作,定义这个操作并不会改变元素的类。这种模式可以在出租车公司的运转中观察到。当一个人给出租车公司打电话时,他(她)就成了公司所有顾客的一员。然后公司指定一辆车去服务(接受访问者)。在进入出租车之后,这个人(访问者)就不再控制他(她)的旅程了,而是由出租车(驾驶员)负责。

意义
软件设计模式有许多非软件的例子存在。也许有人想知道这些例子的实际意义。非软件例子有助于增进模式语言的表达力和辅助模式的学习。
增加模式语言的表达能力
Alexander觉得真正的模式要融入一种通用的语言以便所有人都能够分享。在软件设计的人群中,模式被认为是在同事之间一种约定俗成的开发方式。模式提供了一种比模块、过程和对象更高层次的概念。
一种语言中至关重要的因素是同语言形象所对应的心灵影像。在一种语言中,仅当一个人能够领会一个符 的含义,能够在心里描绘出这种含义时,这个符 的外形才是有意义的。Alexander没有忽视模式语言的这种重要特征,他规定:一种语言只有在它所产生的建筑类型能够被具体地看到之后,这种语言才是完全形态化的。在软件设计中,Richle和Züllighoven认识到具体的例子在指导我们对应用领域的理解的重要性。
如果软件设计模式成为程序员中通用的语言,其基础则是统一的含义。如果设计决定下达了,但是没有被理解,则设计师被迫通过假设来完成工作。平凡的例子更便于理解,其原因在于人们必须在记忆中找到相关联的内容才能够理解。在广泛使用模式的AG Communication Systems公司的项目中,常常使用非软件例子来解释模式之间的关系。这个例子有助于在设计师间提供统一的理解。通过在设计过程的先期建立统一的理解,使得在整个项目生命周期中,设计师间的沟通更加容易。
结论
在非软件例子中软件设计模式的体现表明了模式不是局限于特定领域的。软件设计师可以从这些日常事物的模式举例中受益,哪怕这些例子并不是以程序设计语言表达的。这篇文章尽可能举一些大部分人所熟悉的例子(尽管某些倾向于北美文化)。通过对共同的经历的描述,这些例子有助于对特定的设计模式的理解,并且能够帮助对设计模式的学习。
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34297 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!