设计模式之三 模板模式

模板方法模式定义:算法

定义一个操做中的算法的框架,而将一些步骤延迟到子类中。使得子类能够不改变一个算法的结构既能够从新定义该算法的某些特定步骤。框架

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

相关文章
相关标签/搜索