如何写出高扩展的代码? 设计模式-模板模式

项目经理:小王 马上到618了 你把xx促销活动写了。

开发小王:好的 

一个月后 。。。

项目经理:小王 我们这边需要在加一个活动 你尽快写一下吧。

此时你的第一个促销活动已经写完了 你只能在重新写一遍下一个活动 那些重复的 冗余的代码还要重新写一遍。

这时候我们今天的主人公就来了 模板模式。

Demo-制作包子

编写一个制作包子的程序:

  • 制作包子的流程 选材 > 和馅 > 上蒸笼
  • 选择不同的食材,就可以做出不同口味的包子
  • 制作出牛肉和猪肉的包子

制作包子【抽象类】

@Component
public abstract class BunAbstractService {

    //制作包子 由实现类直接调用该方法即可
    //加final修饰是为了防止被重写 也可以写一个接口由该类实现 重写接口方法
    public final void make(){
        chooseIngredients();
        stir();
        steamBun();
    }

    protected abstract void chooseIngredients();

    private void stir(){
        System.out.println("和馅");
    }

    private void steamBun(){
        System.out.println("蒸包子");
    }
}

具体的牛肉和猪肉 两个【子类】

@Service
public class BeefService extends BunAbstractService {


    @Override
    protected void chooseIngredients() {
        System.out.println("选择的是牛肉");
    }
}



@Service
public class PorkService extends BunAbstractService {


    @Override
    protected void chooseIngredients() {
        System.out.println("选择的是猪肉");
    }
}

具体调用方式

@RestController
public class BunController {

    @Resource
    private BeefService beefService;

    @Resource
    private PorkService porkService;

    @GetMapping("/makeBeef")
    public void makeBeef(){
        beefService.make();
    }
}

一个简易的小demo 主要是为了体现模板模式的复用和易扩展的两个特性。

它的主要原理就是定义一个算法的骨架,把不变的流程定义在算法中,把可变的部分交给子类,由子类来负责具体的实现。

代码很简单,但是掌握这种思想和把这种思想应用到线上就不是那么简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值