設計模式之三 模板模式

模板方法模式定義:算法

定義一個操做中的算法的框架,而將一些步驟延遲到子類中。使得子類能夠不改變一個算法的結構既能夠從新定義該算法的某些特定步驟。框架

image

  • 基本方法:

基本方法也叫作基本操做,是由子類實現,而且在父類的模板方法中調用ide

  • 模板方法:

能夠有一個或幾個,實現對基本方法的調用,完成固定的邏輯.函數

  • 直接上通用的代碼:
public abstract class  AbstractClass {
    // 子類去完成....
    protected abstract   void  doAnything() ;
    
    //
    protected abstract  void  doSomething();
    
    // 模板具體實現
    public void  templateMethod() {
         System.out.println( this.getClass().getName()+ "調用模板基類的方法");
        /**
         * 調用基本方法,完成邏輯....
         */
        this.doAnything();
        this.doSomething();
        
    }

}

public class ConcreteClass1 extends AbstractClass {

    /* 完成本身的一些事情.....
     * <p>Title: doAnything</p> 
     * <p>Description: </p>  
     * @see com.spt.pattern.AbstractClass#doAnything() 
     */
    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub

    }

    /* (具體實現
     * <p>Title: doSomething</p> 
     * <p>Description: </p>  
     * @see com.spt.pattern.AbstractClass#doSomething() 
     */
    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub

    }

}

public class ConcreteClass2 extends AbstractClass {

    /* 具體實現.....
     * <p>Title: doAnything</p> 
     * <p>Description: </p>  
     * @see com.spt.pattern.AbstractClass#doAnything() 
     */
    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub

    }

    /* 具體實現....
     * <p>Title: doSomething</p> 
     * <p>Description: </p>  
     * @see com.spt.pattern.AbstractClass#doSomething() 
     */
    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub

    }

}

public class TemplateClient {

    public static void main(String[] args) {
        //
        AbstractClass  templateClass1 = new ConcreteClass1();
        AbstractClass  templateClass2 = new ConcreteClass2();
        
        templateClass1.templateMethod();
        templateClass2.templateMethod();

    }

}

 

 

  • 模板方法使用的場景:

多個子類有公有的方法,而且邏輯基本相同時。this

重要,複雜的算法,能夠把核心的算法設計爲模板的方法,周邊相關的細節功能由各個子類實現。spa

重構時,模板方法模式是一個常用的模式。把相同的的代碼抽取到父類中,而後經過鉤子函數約束其行爲。設計

 

  • 模板模式的擴展:

image

相關文章
相關標籤/搜索