策略模式、中介者模式和模板方法模式

来源:互联网 发布:淘宝商品标题命名规则 编辑:程序博客网 时间:2024/05/16 12:59


       这几天我们的java学习到了几种重要的设计模式的相关内容,所以就在这写写自己对策略模式、中介者模式和模板方法模式的理解

一 策略模式

       策略模式简单点说就是对一组算法的封装,这组算法可以实现程序需求中的不同功能,它们可以相互替换, 策略模式使算法独立于使用它的客户而变化,即可以动态的选择所需算法。

      策略模式就是用来封装算法的,但在实践中,我们可以用它来封装几乎任何类型的规则,只要在分析过程中需要在不同情况下应用不同的规则,就可以考虑使用策略模式。

      在基本的策略模式中,选择所用具体实现的职责有客户端对象来承担,然后转给上下文对象所使用。

UML视图

                                   

策略模式的结构中包括三种角色:

1  策略(strategy):策略是一个接口,定义若干个算法标识( algorithm()),即定义了若干个抽象方法;

2 具体策略(ConcreteStrategy):具体策略是实现策略接口的类,各具体策略中对 algorithm()方法进行重写,实现上面所说算法对不同需求的不同功能

3 上下文(Context):实现对接口策略的引用,依赖于接口策略的类,上下文中包含有策略声明的变量。上下文中提供一个方法,该方法委托策略变量调用具体策略所重写的策略接口中的方法。(如UML视图中的lookAlgorithm()方法);

具体相关的代码,请点击以下

http://blog.csdn.net/u012186491/article/details/13080227

二 中介者模式

       首先给中介者模式下一个定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。

       在中介者模式中,由于具体中介者控制了集中化,于是把交互复杂性变为了中介者的复杂性,使得中介者变得比任何一个具体同事都复杂。

      他的优点:

1   中介者角色的出现减少了各个同事之间的耦合,使得可以独立的改变和复用同事和中介者;

2 由于把对象如何协作进行了抽象,将中介者作为一个独立的概念,并将其封装在一个对象中,这样关注的对象就从对象本身的行为转移到它们之间的交互上来了;

                                                              

中介者模式的四个角色:

1 中介者:一个接口,定义各同事角色之间的通信;

2 具体中介者:是实现中介者的接口的类,它包含所有具体同事的引用,通过协调各同事角色实现协作行为

3 同事:一个接口,定义具体同事需要实现的方法。

4 具体同事:实现同时接口的类,包含具体中介者的引用,通过具体中介者,和其他具体同时交互。

http://blog.csdn.net/u012186491/article/details/13081733

三 模板方法模式

       当我们要完成在某一细节层次一致的一个过程或一系列步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。模板方法模式使得继承更有意义,它将所有重复的代码都上升到父类去,而不是让每个子类去重复。

    模板方法模式的定义:定义一个操作中的算法骨架(定义一个抽象类),将一小部分不同于这个骨架的细节延迟到子类中去实现(实现抽象类中的抽象方法)。

                                        

模板方法模式中包括两个角色:

1 抽象模板:是一个抽象类,其中定义一个到多个抽象方法,子类可以去实现它们。抽象类中还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他操作,只要完成自身的使命。

2 具体方法:具体模板是抽象模板的子类,重写抽象摸板中定义的抽象方法已完成算法中与特定子类相关的步骤。


以上都是自己学习并且理解的,有什么错误请大家及时指出来,谢谢。

原创粉丝点击