Java设计模式之模板模式

目录

模板模式的介绍

模板模式的案例

模板模式的优缺点

总结


模板模式的介绍

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

通俗易懂的话来说:父类中定义好一个操作的框架(方法),在框架中一个步骤就是一个抽象方法,具体的步骤交给子类来实现,而每个子类的实现的细节都不一致。已达到不同的子类完成一个相似的操作而细节都不一致。

模板模式的案例

先上案例的类图

Java设计模式之模板模式_第1张图片

父类定义了制作炸鸡的方法,而制作一只炸鸡需要养殖->屠宰->油炸,这三个步骤分别定义成一个方法等待子类来重写,因为不同的厂家制作炸鸡在每一步都是有一定的差异的。

Java代码如下:

炸鸡父类

/**
 * @author liha
 * @version 1.0
 * @date 2022/3/21 15:23
 * @description 炸鸡的父类
 */
public abstract class AbstractFriedChicken {

    /**
     * 定义一套制作炸鸡的步骤
     * */
    protected final void makeFriedChicken(){
        breed();
        slaughter();
        Fried();
    }

    // 养殖方法  等待子类实现
    protected abstract void breed();

    // 屠宰方法  等待子类实现
    protected abstract void slaughter();

    // 油炸方法  等待子类实现
    protected abstract void Fried();
    
}

麦当劳厂家

/**
 * @author liha
 * @version 1.0
 * @date 2022/3/21 15:27
 * @description 麦当劳厂家制作炸鸡
 */
public class McDonald extends AbstractFriedChicken{

    /**
     * 麦当劳厂家养殖
     * */
    @Override
    protected void breed() {
        System.out.println("麦当劳养殖鸡每天喂食4次");
    }

    /**
     * 麦当劳厂家屠宰
     * */
    @Override
    protected void slaughter() {
        System.out.println("麦当劳人工屠宰");
    }

    /**
     * 麦当劳厂家油炸
     * */
    @Override
    protected void Fried() {
        System.out.println("麦当劳油炸的油2天换一次");
    }
}

肯德基厂家

/**
 * @author liha
 * @version 1.0
 * @date 2022/3/21 15:28
 * @description 肯德基厂家制作炸鸡
 */
public class KFC extends AbstractFriedChicken{

    /**
     * 肯德基厂家养殖
     * */
    @Override
    protected void breed() {
        System.out.println("肯德基养殖鸡每天喂食2次");
    }

    /**
     * 肯德基厂家屠宰
     * */
    @Override
    protected void slaughter() {
        System.out.println("肯德基用机器屠宰");
    }

    /**
     * 肯德基厂家油炸
     * */
    @Override
    protected void Fried() {
        System.out.println("肯德基油炸的油半天换一次");
    }
}

测试类&控制台输出结果

Java设计模式之模板模式_第2张图片

Java设计模式之模板模式_第3张图片

模板模式的优缺点

优点:

  1. 公共的逻辑代码抽取,代码复用
  2. 父类控制行为,子类具体实现
  3. 封装不变的部分,重写可变的部分,易扩展

缺点:每来一个子类就要定义一套子类的规范,项目的体积会越来越大。

总结

简单的介绍了模板方式的概念和举了一个案例来方便理解,想要看框架源码中对模板模式的使用可以点击下面链接跳转。

模板设计模式在框架源码中的体现https://blog.csdn.net/qq_43799161/article/details/123639776

最后,大家有不懂的地方可以在评论区留言。如果此文章对您有一定的帮助,希望能点赞+关注+收藏,您的支持是我最大的动力,后续一直再更新各种框架的使用和源码解读~!

你可能感兴趣的:(设计模式,模板方法模式,java,后端)