模板方法模式

模板方法模式是一种行为型设计模式,模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。定义中的算法是指业务逻辑,并不特指数据结构和算法中的算法。

原理很简单,代码实现就更加简单,接下来我们通过电商业务中创建促销活动的例子来介绍模板方式模式,促销活动包括满减,折扣,优惠券等。

// 创建活动接口
interface ActCreateService {
    // 创建活动
    void create(String param);
}


// 在抽象类中的create方法中定义创建逻辑的骨架实现,分为校验参数,组装活动扩展信息,保存三个步骤
abstract class AbstractActCreateServiceImpl implements ActCreateService {

    // 创建活动逻辑骨架实现
    @Override
    public final void create(String param) {
        // 1.校验活动主体信息
        checkParam(param);

        // 2.组装活动扩展信息
        Object actInfo = wrapperActExt(param);

        // 3.执行创建活动操作
        // save(actInfo)
    }

    // 校验活动信息,由于各种活动属性不同,所以子类进行实现
    protected abstract void checkParam(String param);

    // 组装活动扩展信息,由各活动类型子类实现
    protected abstract Object wrapperActExt(String param);

}

// 创建满减活动实现类
class ActCreateFullCutServiceImpl extends AbstractActCreateServiceImpl implements ActCreateService {

    @Override
    protected void checkParam(String param) {
        // 校验满减类型活动参数
    }

    @Override
    protected Object wrapperActExt(String param) {
        // 组装满减类型活动扩展信息
        return null;
    }
}

// 创建折扣活动实现类
class MpActCreateDiscountServiceImpl extends AbstractActCreateServiceImpl implements ActCreateService {
    
    @Override
    protected void checkParam(String param) {
        // 校验折扣类型活动参数
    }

    @Override
    protected Object wrapperActExt(String param) {
        // 组装折扣类型活动扩展信息
        return null;
    }
}

模板方法模式的主要作用是扩展和复用,以上示例我们将创建活动的通用骨架逻辑封装到抽象层进行复用,而将创建过程的校验参数和组装扩展信息两个不通用的逻辑分别提供一个模板方法,由子类进行实现。后续如果要新增一个活动类型,比如优惠券,只需要新增一个创建优惠券实现类ActCreateCouponServiceImpl并重写校验参数和组装扩展信息两个方法即可。

综上所述,模板方法模式是在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的算法骨架就是“模板”,包含算法骨架的方法就是“模板方法”,这也是模板方法模式名字的由来。

模板方法模式有两大作用:复用和扩展。复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,通过模板方法提供功能扩展点,让用户可以在不修改模板的情况下,基于扩展点扩展功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值