Template Method 模板模式

来源:互联网 发布:暗黑破坏神2 for mac 编辑:程序博客网 时间:2024/05/16 01:48

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

 

使用方法
各子类中公共的方法提炼出来,集中到父类中定义。而不同的子类所特有的方法,可以通过继承父类的方法在内部自定义。

 

使用范围

* 多个子类存在共通的方法,个别的方法存在区别。

 

 

举例说明
假设盖一个房子,需要如下三种通用的步骤,design,build和decorate。那么可以在父类中定义这三个步骤并交由make()方法统一调用。

public abstract class HouseTemplate {public HouseTemplate(){return;}protected  void design(){System.out.println("design");};protected  void  build(){System.out.println("build");};protected  void  decorate(){System.out.println("decorate");};public void make(){design();build();decorate();}}

 

假设盖大房子BigHouse的时候,需要特殊的build和decorate方法。

public class BigHouse extends HouseTemplate{protected void build(){System.out.println("build big house");}protected void decorate(){System.out.println("decorate big house");}}

 

而盖小房子SmallHouse的时候,只有decorate比较特殊。 

public class BigHouse extends HouseTemplate{protected void build(){System.out.println("build big house");}protected void decorate(){System.out.println("decorate big house");}}

 

通过如上的父类和子类的构建,模板方法模式也就诞生了。接下来看客户类的调用。

public class HouseClient {public static void main(String args[]){BigHouse newhouse = new BigHouse();newhouse.make();SmallHouse oldHouse = new SmallHouse();oldHouse.make();}}

 

观察返回结果,便可知Template Method的原理。

designbuild big housedecorate big housedesignbuilddecorate small house

 

 

下载示例

  • Java代码 zigzagsoft_designpattern_template.zip