定義一個操做中的算法框架,而將一些步驟延遲到子類中。使得子類能夠不改變一個算法結果便可從新定義該算法的某些特定步驟。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