《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式

来源:互联网 发布:vwap算法 编辑:程序博客网 时间:2024/05/01 13:50

《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式

 

GOF定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。

 

继承是OO思想的三大特性(封装、继承、多态)之一。继承是为了更好的代码重用,但是在今天,越来越多的OO方法学大师都不止在一处的总结出:要优先运用组合而不是继承。Template Method模式是目前学到的最简单的模式之一。这也是比较常用到的模式。在Template Method模式中就充分运用了继承。其实在我看来,Template Method模式就是继承。在一个画图的程序中,我写了一个叫drow的方法,它将画出我需要的图形。Template Method模式可以帮我做到这一点,因为对方法的调用通过一个引用来进行的,而这个引用指向的对象属于某一个派生类。

 

下面是Template Method模式UML图:

 

 

下面是实现的Java代码:

定义一个抽象类,用来定义某算法的骨架,在这里是abstract drow

package TemplateMethod;

 

public abstract class ShapeTemplate

{

       public abstract void drow();//Template Method

}//end abctract class shape

 

package TemplateMethod;

 

派生出一个具体类,在具体类中实现了方法drow

public class Square extends ShapeTemplate

{

       @Override

       public void drow()

       {

              System.out.println("画出正方形");

       }//end drow()

 

}//end class Square

 

package TemplateMethod;

 

测试代码:

public class TemplateMethodPattern

{

      

       private ShapeTemplate square;

 

       public TemplateMethodPattern()

       {

              square = new Square();

       }//end TemplateMethodPattern()

      

       public void showTemplateMethodPattern()

       {

              square.drow();

       }//end showTemplateMethodPattern()

      

       public static void main(String[] args)

       {

              System.out.println("The Template Method Pattern!");

             

              TemplateMethodPattern tmp = new TemplateMethodPattern();

              tmp.showTemplateMethodPattern();

       }//end main(...)

 

}//end class TemplateMethodPattern

 

运行结果:

The Template Method Pattern!

画出正方形

 

Template Method模式让我们可以先定义这些步骤地顺序,然后重载那些需要改变的步骤。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=954056