设计模式之行为型模式(二)

来源:互联网 发布:淘宝网店怎么赚钱 编辑:程序博客网 时间:2024/04/27 21:52

设计模式被分成了三大类型:创建型、结构型和行为型。本文介绍一下行为型模式中的解释器模式、中介者模式、访问者模式、策略模式、备忘录模式和迭代器模式。

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

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

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

不足:解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维护。建议当文法非常复杂时,使用其他的技术如语法分析程序或编译器生成器来处理。

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

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

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

缺点:由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。

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

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

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

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

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

应用:(1)当实现某个功能需要有不同算法要求时。(2)不同时间应用不同的业务规则时。

优点:(1)策略模式是一种定义一系列算法的方法,从概念上来看,所有算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。(2)策略模式的Stratege类为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法的公共功能。(3)策略模式每个算法都有自己的类,可以通过自己的接口单独测试。因而简化了单元测试。(4)策略模式将具体算法或行为封装到Stratege类中,可以在使用这些类中消除条件分支(避免了不同行为堆砌到一个类中)。

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

应用:备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,发起人可以根据保存的备忘录信息还原到前一状态。

迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

应用:当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。另外,需要对聚集有多种方式遍历时,也可以考虑用迭代器模式。


0 0