模板方法模式(template)

定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

使用了Java的继承机制,是一个非常广泛的模式。其中AbstractClass叫做抽象模板,它的方法分为三类:

1.1. 基本方法

由子类实现的方法,在模板方法内被调用(尽量设计为protected类型,符合迪米特法则,不需要暴露的属性或方法尽量不要设置为protected类型。实现类若非必要,尽量不要扩大父类中的访问权限)

1.2. 模板方法

可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调用,完成固定的逻辑。(一般都加上final关键字,防止被覆写)

1.3. 钩子方法

由子类覆写的方法,返回一个boolean值,在模板方法中作为用来控制代码逻辑的一个标识.

代码举例

public abstract class AbstractClass {
    protected abstract void doAnything();  //基本方法
    protected abstract void doSomething();  //基本方法
    protected boolean isDoSomething(){ //钩子方法,默认父类方法返回真
        return true;
    }
    public final void templateMethod(){
        /*
         * 调用基本方法,完成相关的逻辑
         */
        this.doAnything();
        if(this.isDoSomething())
            this.doSomething();
    }
}
public class ConcreteClass1 extends AbstractClass {
    private boolean isDoSth;
    @Override
    protected void doAnything() {
        //子类实现具体
    }

    @Override
    protected void doSomething() {    
    }
    protected void setDo(boolean isDo){
        this.isDoSth = isDo;
    }
    protected boolean isDoSomething(){
        return isDoSth;
    }
}

results matching ""

    No results matching ""