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

《设计模式精解》学习笔记(十四)------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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值