本博客接上一篇博客——行为型模式(一)
解释器模式
故事:
用解释器模式制作一个音乐制作器,用代码来表示一个音乐的音符来一一对应实现。
定义:
给定一个语言,定义它的文法中的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
UML:
用途和优点:
1、解决一个特定类型的问题发生的频率足够高,那么就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
2、当有一个语言需要解释执行,并且你可将该语句中的句子表示为一个抽象语法树时。
不足:
解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法难以管理和维护。建议用其他技术,比如语法分析程序或编译生成器来处理。
中介者模式
故事:
联合国作为一个中介来连接各个国家。
定义:
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
UML:
优点:
一个问题:将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性了。该模式把交互关系来封装使得降低耦合。
用途:
1、如果遇到多对多交互关系时,先不要急于用这个模式,先分析自己的系统是否合理。
2、一组对象以定义良好,但是复杂的方法进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多类的场合。
访问者模式
故事:
男人和女人,两种人,不同的状态访问。
定义:
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
UML:
优点:
1、把处理从数据结构中分离开。
2、增加一个新的操作系统很容易,因为增加新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问者对象中。
缺点:
增加新的数据结构困难。
用途:
1、访问者模式适用于数据结构相对稳定的系统,他把数据结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。
2、用于比较稳定的数据结构,又有易于变化的算法。
策略模式
故事:
商场的收费标准,有打折的,有优惠的,不能总是修改收费的标准,也就是一个功能,需要多种算法的实现,要添加,也不能太多,要灵活,不能阻碍已有的算法的使用,比如机房收收费系统中的结账功能,一小时多少钱,如果打折怎么样。
定义:
她定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
UML:
优点:
1、策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式,调用所有的算法,减少了各种算法类与使用算法之间的耦合。
2、其中,Stategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
3、简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
4、封装了算法,消除条件语句。
用途:
用于封装算法,封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。,选择所用具体实现的职责有客户端对象承担,并转给策略模式的Context对象。注意与简单工厂模式结合,让Context来承担客户端的职责。(在context中也用到了条件语句,使用的时候,可以用反射技术!)
备忘录模式
故事:
玩游戏的时候,要把一个状态保存起来,以便恢复。
定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
UML:
优点与用途:
迭代器模式
故事:
定义:
UML:
优点:
用途:
与机房: