设计模式-模板模式在Java中的使用示例

场景

模板模式

模板模式又叫模板方法模式(Template Method Pattern),是指定义一个算法的骨架,并允许子类为一个

或者多个步骤提供实现。

模板模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式。

模板模式适用于以下场景:

1、一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。

2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。

以网络销售商品为例,模板流程大体为:

上架商品-下订单-发快递-收货 ,如果需要退货还需进行退货流程。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

模板模式示例

首先创建NetworkGoods抽象类

package com.ruoyi.demo.designPattern.templatePattern;

public abstract class NetworkGoods {
   
    protected final void saleGoods(){
        //上架商品
        this.groundGoods();
        //下订单
        this.placeOrder();
        //发快递
        this.express();
        //收货
        this.receipt();
        //是否需要退货
        if(needReturnGoods()){
            doReturnGoods();
        }
    }

    //进行退货
    abstract void doReturnGoods();

    //是否需要退货
    //钩子方法:实现流程的微调
    protected  boolean  needReturnGoods(){
        return false;
    }
    //上架商品
    final void groundGoods(){
        System.out.println("上架商品");
    }

    //下订单
    final void placeOrder(){
        System.out.println("下订单");
    }

    //发快递
    final void express(){
        System.out.println("发快递");
    }

    //收货
    final void receipt(){
        System.out.println("收货");
    }
}

上面代码中有个钩子方法,主要目的是干预执行流程,使得控制行为更加灵活,更符合实际业务的需求。

然后创建ComputerGoodsSale

package com.ruoyi.demo.designPattern.templatePattern;

public class ComputerGoodsSale extends NetworkGoods{
    @Override
    void doReturnGoods() {
        System.out.println("电脑进行退货");
    }
}

创建BookGoodsSale

package com.ruoyi.demo.designPattern.templatePattern;

public class BookGoodsSale extends NetworkGoods{

    private boolean needReturnGoodsFlag = false;

    public BookGoodsSale(boolean needReturnGoodsFlag){
        this.needReturnGoodsFlag = needReturnGoodsFlag;
    }

    @Override
    protected boolean needReturnGoods() {
        return this.needReturnGoodsFlag;
    }

    @Override
    void doReturnGoods() {
        System.out.println("书籍进行退货");
    }
}

客户端测试代码

package com.ruoyi.demo.designPattern.templatePattern;

public class networkGoodsSaleTest {
    public static void main(String[] args) {
        System.out.println("电脑进行网络销售");
        NetworkGoods computerGoods = new ComputerGoodsSale();
        computerGoods.saleGoods();

        System.out.println("书籍进行网络销售");
        NetworkGoods bookGoods = new BookGoodsSale(true);
        bookGoods.saleGoods();
    }
}

模板模式的经典应用场景-JdbcTemplate

创建模板类JdbcTemplate,封装所有的JDBC操作。以查询为例,每次查询的表不同,返回的

数据结构也不一样。针对不同的数据,都要将其封装成不同的实体对象。而每个实体对象的发封装

逻辑是不一样的,但是封装前和封装后的流程是不变的。

模板模式的优缺点

优点:

1、利用模板模式将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性。

2、将不同的代码放到不同的子类中,通过对子类的扩展增加新的行为,可以提高代码的扩展性。

3、将不变的行为写在父类中,去除子类的重复代码,提供了一个很好的代码复用平台,符合开闭原则。

缺点:

1、每个抽象类都需要一个子类来实现,导致了类的数量增加。

2、类数量的增加间接地增加了系统的复杂性。

3、因为继承关系自身的缺点,如果父类增加新的抽象方法,所有子类都要改一遍。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值