模式定义
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,从而使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用方法
各子类中公共的方法提炼出来,集中到父类中定义。而不同的子类所特有的方法,可以通过继承父类的方法在内部自定义。
使用范围
* 多个子类存在共通的方法,个别的方法存在区别。
举例说明
假设盖一个房子,需要如下三种通用的步骤,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的原理。
design build big house decorate big house design build decorate small house
下载示例