Java设计模式之模板模式

目录

模板模式的介绍

模板模式的案例

模板模式的优缺点

总结

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

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

模板模式的案例
先上案例的类图

 

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

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("肯德基油炸的油半天换一次");
    }
}
测试类&控制台输出结果

模板模式的优缺点
优点:

公共的逻辑代码抽取,代码复用
父类控制行为,子类具体实现
封装不变的部分,重写可变的部分,易扩展
缺点:每来一个子类就要定义一套子类的规范,项目的体积会越来越大。

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

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

最后,大家有不懂的地方可以在评论区留言。如果此文章对您有一定的帮助,希望能点赞+关注+收藏,您的支持是我最大的动力,后续一直再更新各种框架的使用和源码解读~!
————————————————
版权声明:本文为CSDN博主「程序员李哈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43799161/article/details/123635463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值