JAVA设计模式之Template Method模式
2011-05-05 08:45
197 查看
现在让你设计一个类,这个类含有一个特定的功能,但是该功能中的某些操作的具体逻辑现在无法确定下来,因为不同的情况下,可能要求改变这些具体的操作。那么我们如何来设计呢???
比如现在有一个算法Algorithm,它含有四个步骤(原子操作),分别是step1,step2,step3,step4。现在让你设计一个类来封装它,你该如何设计呢???
你可能会想到,当我们在具体使用它的时候,直接以方法实现在需要的类中就可以了。但是,注意到,我们说过,算法的步骤(骨架)是确定的。所以,每次使用的时候,就意味着你都做了大量重复性的劳动。
哈哈,其实很容易想到了,我们可以抽取那些可变的操作作为单独的方法,然后在那个不变的算法逻辑中调用,抽取出来的方法先不实现,留给子类来实现。这就是模板方法的设计模式了,很简单对吗,因为他就涉及到一个继承关系。如下图:
其中Template是一个抽象类,他的algorithm的实现逻辑如下:
其中,step1~step4就是预定义好的一系列抽象的原子操作,子类必须要实现这些方法。注意到,为了保证子类在扩展父类的时候,破坏业务逻辑,因为子类可以通过重写父类的algorithm方法来改变其逻辑,我们可以将algorithm的方法设置为final类型的,这样子类就无法重写父类中的algorithm方法了。
模板方法设计模式,是符合开闭原则的,开闭原则就是指一个软件实体应该对扩展开发,而对修改关闭!显然,模板方法的设计思想是符合开闭原则的。
同时,父类中的原子操作,事由子类实现的,而对其他的类应该是不可见的。所以,step1~step4应该定义为protected的,这些方法只是为algorithm服务的,而不是暴露给别的类来调用的,别的类关心的只是algorithm方法。
比如现在有一个算法Algorithm,它含有四个步骤(原子操作),分别是step1,step2,step3,step4。现在让你设计一个类来封装它,你该如何设计呢???
你可能会想到,当我们在具体使用它的时候,直接以方法实现在需要的类中就可以了。但是,注意到,我们说过,算法的步骤(骨架)是确定的。所以,每次使用的时候,就意味着你都做了大量重复性的劳动。
哈哈,其实很容易想到了,我们可以抽取那些可变的操作作为单独的方法,然后在那个不变的算法逻辑中调用,抽取出来的方法先不实现,留给子类来实现。这就是模板方法的设计模式了,很简单对吗,因为他就涉及到一个继承关系。如下图:
其中Template是一个抽象类,他的algorithm的实现逻辑如下:
public final void algorithm(){ System.out.println("The Algorithm is beginning..."); step1(); step2(); step3(); step4(); System.out.println("The Algorithm is stopping..."); }
其中,step1~step4就是预定义好的一系列抽象的原子操作,子类必须要实现这些方法。注意到,为了保证子类在扩展父类的时候,破坏业务逻辑,因为子类可以通过重写父类的algorithm方法来改变其逻辑,我们可以将algorithm的方法设置为final类型的,这样子类就无法重写父类中的algorithm方法了。
模板方法设计模式,是符合开闭原则的,开闭原则就是指一个软件实体应该对扩展开发,而对修改关闭!显然,模板方法的设计思想是符合开闭原则的。
同时,父类中的原子操作,事由子类实现的,而对其他的类应该是不可见的。所以,step1~step4应该定义为protected的,这些方法只是为algorithm服务的,而不是暴露给别的类来调用的,别的类关心的只是algorithm方法。
相关文章推荐
- Java设计模式----模板方法模式(Template Method)
- Java设计模式之一——模板方法设计模式(Template Method)
- Java设计模式透析之 —— 模板方法(Template Method)
- Java开发中的23种设计模式详解----模板方法模式(Template Method)
- Java 设计模式--模板方法(Template Method)
- Java设计模式透析之 —— 模板方法(Template Method)
- JAVA--模版方法模式(Template Method)--设计模式十四
- Java设计模式透析之 —— 模板方法(Template Method)
- Java设计模式之模板方法模式(Template Method)
- java设计模式——模板方法模式(Template Method Pattern)
- Java设计模式—模板方法(Template Method)
- JAVA设计模式 —模板设计模式(Template Method)
- Java设计模式透析之 —— 模板方法(Template Method)
- 【java设计模式】之 模板方法(Template Method)模式
- Java设计模式透析之 —— 模板方法(Template Method)
- Java设计模式之模板方法模式(Template Method)
- Java设计模式之模板方法模式(Template Method)
- 【java设计模式】之 模板方法(Template Method)模式
- Java设计模式之模板方法模式(Template Method)
- Java设计模式之模板方法模式(Template Method)