美文网首页
模板方法模式

模板方法模式

作者: 杨殿生 | 来源:发表于2019-01-15 11:26 被阅读0次

首先来看一下类图


模板方法模式类图

原理就是,通过抽象的父类来控制子类的行为,具体的行为由子类定义
1,定义一个抽象的父类将公共执行部分抽取到父类中

public abstract class AbstractClass {
    //基本方法
    protected abstract void doSomething();
    //基本方法
    protected abstract void doAnything();
    //模板方法
    public final void templateMethod(){
        /**
         * 调用基本方法完成相关逻辑
         */
        this.doSomething();
        this.doAnything();
    }
}

2,定义不同子类实现具体的执行方法

public class ConcreteClass1 extends AbstractClass{
    @Override
    protected void doSomething() {
        //业务逻辑处理
    }

    @Override
    protected void doAnything() {
        //业务逻辑处理
    }
}

public class ConcreteClass2 extends AbstractClass{
    @Override
    protected void doSomething() {
        //业务逻辑处理
    }

    @Override
    protected void doAnything() {
        //业务逻辑处理
    }
}

3,调用执行相应方法

public class Main {
    public static void main(String[] args){
        AbstractClass abstractClass1 = new ConcreteClass1();
        AbstractClass abstractClass2 = new ConcreteClass2();
        //调用模板方法
        abstractClass1.templateMethod();
        abstractClass2.templateMethod();
    }
}

这个模式非常简单,可能我们都使用过只是不知道他的名字而已,这个模式也可以配合钩子使用,在父类中定义钩子,在之类中定义是否执行公共方法,具体代码如下

public abstract class AbstractClass {
    //基本方法
    protected abstract void doSomething();
    //基本方法
    protected abstract void doAnything();
    //模板方法
    public final void templateMethod(){
        /**
         * 调用基本方法完成相关逻辑
         */
        this.doSomething();
        //是否执行公共算法中的某个方法
        if (this.canDoAnything()){
            this.doAnything();
        }
    }

    /**
     * 钩子,是否可以执行公共算法中的方法
     * @return
     */
    protected abstract boolean canDoAnything();
}

相关文章

网友评论

      本文标题:模板方法模式

      本文链接:https://www.haomeiwen.com/subject/ebiedqtx.html