zoukankan      html  css  js  c++  java
  • 设计模式之“行为型模式”(二)

        行为型模式第二部分:解释器模式、中介者模式、訪问者模式、策略模式、备忘录模式、迭代器模式。


    解释器模式

        给定一个语言。定义它的文法的一种表示。并定义一个解释器。这个解释器使用该表示来解释语言中的句子。
        
        使用时期
        假设一种特定类型的问题发生的频率足够高。那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就能够构建一个解释器。该解释器通过解释这些句子来解决该问题。

    中介者模式

       用一个中介对象来封装一系列的对象交互。中介者使各个对象不须要显试地相互引用,从而使其耦合松散,并且能够独立地改变它们之间的交互。
       
    一、长处
        1、降低了各个对象之间的耦合,使得能够独立地改变和复用各个对象和中介者。
        2、将中介作为一个独立的概念并将其封装在一个对象中。这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

        
    二、缺点
        因为中介者控制了集中化,于是就把交互复杂性变为了中介者的复杂性。这就使得中介者会变得比不论什么一个对象都复杂。

    三、适用范围
        1、用于一组对象以定义良好可是复杂的方式进行通信的场合。
        2、想制定一个分布在多个类中的行为。而又不想生成太多的子类的场合。

    訪问者模式

        表示一个作用于对象结构中的个元素的操作。

    它使你能够在不改变个元素的类的前提下定义作用于这些元素的新操作。


    一、使用范围
        数据结构相对稳定的系统
        
    二、作用
        把数据结构和作用于结构上的操作之间的耦合解脱开。使得操作集合能够相对自由地演化。


    三、目的
        把处理从数据结构分离出来。
        
    四、长处
        添加新的操作非常easy。由于添加新的操作就意味着添加一个新的訪问者。訪问者模式将有关的行为集中到一个訪问者对象中。


    策略模式

        把算法分别封装起来,使算法与算法之间能够替换,而且使得在变化的同一时候不影响使用算法的客户。

        策略模式的长处:
        1、降低耦合:能够以同样的方式调用全部的算法,仅仅是实现不同,降低了各种算法与使用算法类之间的耦合。
        2、使用继承:策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。

    继承有助于析取出这些算法中的公共功能。


        3、简化单元測试:每一个算法都有自己的类,能够通过自己的接口单独測试。
        4、避免大量推断:将不同的行为封装在一个个独立的Strategy类中,能够在使用这些行为的类中消除条件语句。

        5、封装算法:为不同的类型定义了不同的策略类和对应支持算法的接口,从而封装了详细的算法或行为。

    备忘录模式

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

    一、作用
        1、把要保存的细节给封装在Memento中了。哪一天要更改保存的细节。也不用影响client了。
        2、使用备忘录能够把复杂的对象内部信息对其它的对象屏蔽起来。
        3、角色的状态改变的时候,有可能这个状态无效。这时候就能够使用临时存储起来的备忘录将状态复原。

    二、使用范围
        比較适用于功能比較复杂的。可是须要维护或记录属性历史的类,

    三、与命令模式的关系
        在某个系统中使用命令模式时,须要实现命令的撤销功能,那么命令模式能够使用备忘录模式来存储可撤销操作的状态。

    迭代器模式
        1、提供一种方法顺序訪问一个聚合对象中各个元素。而又不暴露该对象的内部表示。
        2、为遍历不同的聚集结构提供如開始、下一个、是否结束、当前哪一项等统一的接口。
        3、分离了集合对象的遍历行为,抽象出了一个迭代器类来负责。这样既能够做到不暴露集合的内部结构,又可让外部代码透明的訪问集合内部的数据。

        适用范围
        1、须要訪问一个聚集对象,并且无论这些对象时什么都须要遍历的时候。应该考虑使用迭代器模式。
        2、须要对聚集有多种方式遍历时,能够考虑使用迭代器模式。






  • 相关阅读:
    个人冲刺6
    个人冲刺5
    个人冲刺4
    学习进度10
    个人冲刺3
    个人冲刺2
    单词统计
    返回一个整数数组中最大子数组的和
    JavaWeb_JavaEE_命名规则 转载http://www.cnblogs.com/xwdreamer/
    软件工程作业(四则运算web界面实现)-3
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6800035.html
Copyright © 2011-2022 走看看