定义一个操做中的算法框架,而将一些步骤延迟到子类中。使得子类能够不改变一个算法结果便可从新定义该算法的某些特定步骤。java
模板方法模式使用了java的继承机制。通用代码:算法
public abstract class AbstractClass { protected abstract void doSomething(); protected abstract void doSomething1(); public void templatething(){ this.doSomething(); this.doSomething1(); } }
public class ConcretClass1 extends AbstractClass{ @Override protected void doSomething() { } @Override protected void doSomething1() { } }
public class ConcretClass2 extends AbstractClass{ @Override protected void doSomething() { } @Override protected void doSomething1() { } }
抽象方法中尽可能用protected方法。框架
模板方法模式扩展:ide
public abstract class AbstractClass { protected abstract void doSomething(); protected abstract void doSomething1(); public void templatething(){ if(isSomething()){ this.doSomething(); } this.doSomething1(); } // 钩子方法 protected boolean isSomething(){ return true; } }
public class ConcretClass2 extends AbstractClass{ @Override protected void doSomething() { } @Override protected void doSomething1() { } // 重写父类的钩子方法 protected boolean isSomething(){ return false; } }
public class ConcretClass2 extends AbstractClass{ @Override protected void doSomething() { } @Override protected void doSomething1() { } // 重写父类的钩子方法 protected boolean isSomething(){ return false; } }
模板方法模式就是在模板方法中按照必定的规则和顺序调用基本方法,而且存在钩子方法(isSomething())影响执行顺序。this