设计模式——行为型2

来源:互联网 发布:博弈树搜索算法 编辑:程序博客网 时间:2024/05/22 11:32

   1.解释器(interpreter)

   “给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。”

   结构图

   优点:容易地改变和扩展文法,因为该模式使用类来表示文法规则,你可使用继承来改变或扩展该文法。也比较容易实现文法,因为它定义抽象语法树中各个节点的类的实现大体相似,这些类都易于直接编写。

   应用场合:当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用该模式。

   2.中介者(Mediator)

   “用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。”

   结构图:

   优缺点:Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator,;由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。但由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。

   应用场合:中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

   3.访问者(Visitor)

   “表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。”

   结构图:

   此模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。

   优点:增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。

   缺点:使增加新的数据结构变得困难。

   4.策略(Strategy)

   “定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户变化。”

   结构图:

  

   封装变化点是面向对象的一种很总要的思维方式,算法本身只是一种策略。

   优点:Strategy类层次为Context定义了一系列可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。同时它简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

   5.备忘录(Memento)

   “在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。”

   结构图:

 

   当角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态恢复。

   应用场合:适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。在实现命令模式的撤销功能时,可以使用备忘录模式存储可撤销操作的状态。

   6.迭代器(Iterator)

   “提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。”

   结构图:

  

   优点:Iterator模式分离了集合对象了遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

   应用场合:需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,或者需要对聚集有多种方式遍历时,可以考虑用此模式。

 

 

 

原创粉丝点击