其他分享
首页 > 其他分享> > [设计模式] 模板方法模式

[设计模式] 模板方法模式

作者:互联网

[设计模式] 模板方法模式

目录

手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。

平台 地址
CSDN https://blog.csdn.net/sinat_28690417
简书 https://www.jianshu.com/u/3032cc862300
个人博客 https://yiyuery.github.io/NoteBooks/

模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的具体实现步骤

类图

在这里插入图片描述

实现

//定义算法模板
public abstract class AbsractTemplate {

    /**
     * 准备工作
     */
    void prepare(){
        step1();
        step2();
        step3();
        step4();
    }

    void step1(){
        System.out.println("step1 completed!");
    }

    void step2(){
        System.out.println("step2 completed!");
    }

    abstract void step3();

    abstract void step4();

}

抽象类方法交由子类实现,抽象类模板中负责组织方法间调用的依赖和顺序管理。

public class HandlerOne extends AbsractTemplate {

    @Override
    void step3() {
        System.out.println("HandlerOne step3");
    }

    @Override
    void step4() {
        System.out.println("HandlerOne step4");
    }
}

public class HandlerTwo extends AbsractTemplate {

    @Override
    void step3() {
        System.out.println("HandlerTwo step3");
    }

    @Override
    void step4() {
        System.out.println("HandlerTwo step4");
    }
}

挂钩

抽象父类中还可以定义钩子函数,来由子类进行覆盖实现,可以用来控制方法的调用链的每个节点是否执行。

public abstract class AbsractTemplate {

    /**
     * 准备工作
     */
    void prepare(){
        step1();
        step3();
        step4();
        if(hook()){
            step2();
        }
    }

    void step1(){
        System.out.println("step1 completed!");
    }

    void step2(){
        System.out.println("step2 completed!");
    }

    abstract void step3();

    abstract void step4();

    //钩子
    boolean hook(){
        return false;
    }
}

子类实现覆盖钩子函数

public class HandlerThree extends AbsractTemplate {

    @Override
    boolean hook() {
        return true;
    }

    @Override
    void step3() {
        System.out.println("HandlerThree step3");
    }

    @Override
    void step4() {
        System.out.println("HandlerThree step4");
    }
}

总结

模板方法模式

模板方法模式和策略模式

设计要点

更多

扫码关注架构探险之道,回复文章标题,获取本文相关源码和资源链接

在这里插入图片描述

知识星球(扫码加入获取历史源码和文章资源链接)

在这里插入图片描述

标签:子类,void,模式,算法,step4,设计模式,方法,模板
来源: https://blog.51cto.com/u_15263565/2886083