模板设计模式(Template Design Pattern)

本文介绍了模板设计模式的概念及其应用实例。通过定义一组算法框架,并将具体实现细节留给子类完成,该模式有效减少了代码重复并简化了流程变更。文章通过制作饮料的例子详细展示了模板模式的工作原理。

如果说算法,数据结构是编码术的层面,那么设计模式则是编码中的道。

定义

模板设计模式,定义一组算法的框架,这些算法的步骤大致相同。而将这些算法中不同的步骤延迟到子类中实现。

例子

我们在日常生活中使用的料理机时,先将原材料经过初步处理(打豆浆,需要泡豆子;榨果汁,需要提前将水果洗好),然后打开料理机的盖子打开,将原材料放进去,打开料理机开关完成粉碎,然后过滤,得到我们想要的果汁(或豆浆)。将整个流程抽象:

  • 1,准备原材料
  • 2,完成粉碎
  • 3,过滤出果汁(豆浆)

我感觉自己快变成一个厨师了。

这三个步骤中的第一个步骤可以根据材料的不同可以有不同的操作,第二,三个步骤就比较固定了。

UML 图

1271265-20180517212905791-975941198.png

代码实现

  • 抽象类,定义算法流程
public abstract class DrinkMaker {

    public final void run() {
        prepareMaterial();
        smash();
        filter();
    }

    public abstract void prepareMaterial();

    private void smash() {
        System.out.println("material is smashed!");
    }

    private void filter() {
        System.out.println("drink is filter out!");
    }
}
  • 实现类,实现父类中的prepareMaterial,准备豆子。
public class SoyBeanMaker extends DrinkMaker {
    @Override
    public void prepareMaterial() {
        prepareSoybean();
    }

    private void prepareSoybean() {
        System.out.println("soybean is prepared!");
    }
}
  • 实现类,实现父类的prepareMaterial,准备水果。
public class FruitJuiceMaker extends DrinkMaker {
    @Override
    public void prepareMaterial() {
        prepareFruit();
    }
    
    private void prepareFruit() {
        System.out.println("Fruit is prepared!");
    }
}

详解

通过上面的UML图和代码,可以看出,模板设计模式,首先在父类中定义了一个流程,规定每个步骤应该做什么。子类根据制作饮料的不同,准备不同的材料(实现父类中定义的第一个抽象步骤)。

优点

1,相同的流程只需要定义在父类就可以,减少了重复代码。
2,在修改流程时,只需要修改父类的run方法就可以,不需要对每个子类修改。

转载于:https://www.cnblogs.com/arax/p/9053439.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值