软件设计模式的非软件例子(三)

行为模式--描述类和对象怎样交互和怎样分配职责
  作者总结了十一种行为模式。这些模式可以在硬币分类银行、馆订餐、音乐运输、汽车修理、自动售货机和家庭建筑中找到例子。
 职责链Chain of Responsibility)举例
   模式使个对机会求,免请送者者之合关械硬币分使用。这是为硬币个滑是仅使个滑硬币,硬被银内部的机械导向至适当的接收盒。
 
  13 使用硬币分拣例子的职责链模式对象图
 
 命令Command)模式
    式将求封个对而使使用请求进行。用账单是命的一。服受顾单,在账封装单被待烹意这里的“账是不依赖于菜单的,它可以被不同的顾客使用,因此它可以添入不同的点单项目。(关于这个实例的详细解析见我的那篇 从“在快餐店吃饭”到Command模式(一)
 
  14 :使用用餐例子的命令模式对象图
 
解释器Interpreter)举例
    解释器模式定义了特定语言的文法示和解释该文法的解释器。音乐是解释器的例子。音阶和的持续时间可以用五线谱上的符号表这些符号就是音乐语言[14]音乐家按照乐谱演奏就可以反复重现同样的音乐。
 
 
15:使用音乐例子的解释器模式对象图
 
  迭代器Iterator)举例
 
  迭代器提供一种方法顺序访问一个合对象中各个元素,而又不需要露该对象的内
 
部表示。在期的电视机中一个拨盘用来改变频当改变频道时需要手工转动
 
拨盘移过每一个频道而不论这个频道是否有信号。电视使[一个][
 
]按钮。当按下[一个],将下一的频象一下在
 
店中。当道时的不道,目内果对
 
道的目不兴趣,那么可以换下一个频道,而不需要知道它是几频道。
    
     
 
16 :使用选频器作例子的迭代模式对象图
 
中介者(Mediator)举例
    模式中介控制的对。通者实对象松散而不是彼作用。机场的控好地这种模式。降落飞的接与讯,彼此直接可以降落台决定的。这里意的并不个飞。它飞机机场近的区域。
 
 
 
 
 
 
   17 :使用训练中心为例子的中介者模式
 
  备忘录Memento)举例
    模式且在存一的内,使可以恢复状态式通常体自己车的。首两边,露刹车能卸,这片作一个忘录来表明刹车是怎样安装在这片修理完成后才可以卸下另一当第二片卸下时第一片就成了备忘录。
   
 
  18 :使用刹车片例子的备忘录模式对象图
 
观察者(Observer)模式
    定义间一关系个对态变所有的对到通自动地更卖演种模个投有一数字用于出价。拍卖拍卖观察否有子举起出价每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。(有关观察者模式在我的那篇倾听来自观察者模式中两个成员的经典对话。。。有详细介绍
  
 
  19 :使用拍卖例子的观察者模式
 
 状态(State)模式
      式允对象部状时改行为。这种模式自动上观察到。自动售货态包品清款,选择几种状态。当投并选个商自动货机以下作,送出找钱、送出商品、由不足商品、由于商品完不出商品。
 
 
 
20 :使用自动售货机例子的状态模式对象图
 
 策略Strategy)模式
     式定系列互替算法到飞的方一个式的例子。有几种选己开出租机场班车、乘公或使服务等等。对于场,直升也是能的选择。任何一种方式都可以把你送到机场,它们可以相互代替。你必须根据价格便利性和时间做出选择。
 
   
 
 
  21 :使用去机场作为例子的策略模式对象图
 
  模板方法Template Method)举例
     模法定个操法的而将骤延类中。房屋建筑发新会使用模。一的规一些面图平面了不。在面图地基结构、上下水和走线对于每个房间都是一样的只有在建筑的后期才开始有差别而产生了不同的房屋样式。
 
   
 
  22 :使用建筑平面图为例子的模板方法模式
 
 访问者(Visitor)举例
    访模式个作象结元素,定操作改变的类式可以在公司中观察到。当一出租打电他(成了有顾一员后公指定一辆车去服(接受访问者在进入出租车之后这个(访问者就不再控制(她的旅程了而是由出租车(驾驶员)负责。
  
 
 
  23 :使用出租车例子的观察者模式对象图
 
意义
     作者已经表明了软件设计模式的非软件例子的存也许有人想知道这些例子的实际意非软件例子有助于增进模式语言的表达力和辅助模式的学习。
 
增加模式语言的表达能力
    Alexander  觉得真式要种通言以便人都[2]件设群中认为是在同事之间一种约定俗成的开发方式[417]模式提供了一种比模块过程和对象更高层次的概念[10]
    一种语言中至关重要的因素是同语言形象所对应的心灵影在一种语言中仅当一个人能够领会一个符号的含义能够在心里描绘出这种含义时这个符号的外形才是有意义的[7]Alexander没有忽视模式语言的这种重要特征,他规定:一种语言只有在它所产生的建筑类型能够被具体地看到之后,这种语言才是完全形态化的[1]在软件设计中,Richle Züllighoven认识到具体的例子在指导我们对应用领域的理解的重要性[12]
   如果软件设计模式成为程序员中通用的语言其基础则是统一的含义如果设计决定下达了但是没有被理解,则设师被迫通假设来完工作[19]平凡的例子便于理解其原因在人们必须记忆中找的内容才能够理解[20]。在广泛使用模式的AGComm  nicationSystems司的项目中,常常使用非软件例子来解之间。这有助计师统一。通计过期建的理,使在整个项目生命周期中,设计师间的沟通更加容易。
 
非软件例子作为学习模式的助手
 
   在新概念出现时,学生需要例这可以在AGComm nicationSystems 司的模式推
 
行过程的总结中见同时这也是被其他人总结出来的[12]在学习新东西时学生很
 
自然地会使用学过的知识来帮助新概念的理解[6]由于这个因,许多子应当在
 
生第一次触软件设模式时提[12]某些子应该在生学习了
 
出,等他专家以后。提供例子加需的新内容。这
 
学生外的子可以避学习素材缺的情况既然模式终要停留人的
 
头脑[11],因此可以使用大数人熟悉 来自于记忆中的训练材料。
 
结论

   在非软件例子中软件设计模式的体现表明了模式不是局限于特定领域软件设计师可以从这些日常事物的模式举例中受益哪怕这些例子并不是以程序设计语言表达这篇文章尽可能举一些大部分人所熟悉的例(尽管某些倾向于北美文化通过对共同的经历的描述这些例子有助于对特定的设计模式的理解并且能够帮设计模式的学习。

     感谢

本文作者非常感谢 Dalmatian Gro  p Brandon GoldfedderAG Comm  nication Systems Linda RisingH  mans

  and Technology Alistair Cockb  rn 和伊利诺思大学 Ralph Johnson 对本文提出的有益

 

建议。

  参考书目

 

1.  Alexander, C. The Timeless Way of Building. O xford U niversity Press, 1979.

 

  2.  Alexander, C., et al. A Pattern Language. O xford U niversity Press, 1977.

 

3.  Anthony, D. "Patterns for Classroom Education", in Pattern Languages of Program Design II,

 

Addison-Wesley,1996.

 

4.  Berczuk, S. "Finding solutions through pattern languages", Computer, Vol. 27, No. 12.

December, 1994.

 

5.  Booch, G. "Object Oriented Design" in Tutorial on Software Design Techniques, pp. 420-

437, IEEE Computer Society, 1984.

 

6.  Carroll,  J.  "The  Nurnberg  funnel:  Designing  minimalist  instruction  for  practica

 

computer  skill",  MIT  Press,1990.

 

7.  Chierchia, G. and McConnel-Ginnet, S. Meaning and Grammar: An Introduction to

Semantics. MIT Press, 1990.

 

  8.  Chilton, Chilton's Auto Repair Manual, Chilton Book Company, 1985.

 

9.  Coplien,  J.  "Broadening  beyond  objects  to  patterns  and  to  other  paradigms",  Position  statement  for  the  ACM Workshop on Strategic Directions in Computing Research, MIT, June 14-15, 1996.

(声明:本文Michael  Duell著,翻译者为Wu,出自< <非程序员> >,转载请注明此信息 )



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值