模板方法模式的实现【行为型】

模板方法模式是一种行为型模式,当执行某个操作的步骤基本上是固定的是,可以使用模板方法模式。

模板方法模式定义了一个算法框架,将一系列具体的操作交给子类中去实现。可以在不改变模板框架算法的情况下,灵活的扩展改变每一步的具体实现。

模板方法模式主要包括三个方面:

  1. 抽象类:负责定义算法框架和模板方法的实现

  2. 具体子类:负责首相类中各个抽象方法的具体的实现

  3. 模板方法:执行算法方法的顺序

举例:当我们在泡茶时,泡茶的顺序基本上都是一致的,如:烧水、拿茶叶、倒茶、等待、品茶、洗锅。可以看出,除了拿茶叶究竟是红茶还是绿茶或者是果茶不一样,其他的步骤全部相同,这时就可以使用模板方法模式了。

代码实现:

1、创建抽象类【泡茶】

public abstract class MakeTea {
​
    public void make() {
        heatWater();
        this.takeTae();
        pourTea();
        waitTea();
        drinkTea();
        washPot();
    }
​
    private void pourTea() {
        System.out.println("倒茶");
    }
​
    /**
     * 拿茶叶要根据不同的茶拿不同的茶叶,由子类实现
     **/
    public abstract void takeTae();
​
    private void heatWater() {
        System.out.println("烧水");
    }
​
    private void waitTea() {
        System.out.println("等待");
    }
​
    private void drinkTea() {
        System.out.println("喝茶");
    }
​
    private void washPot() {
        System.out.println("洗锅");
    }
​
​
}

2、创建具体的子类,泡花茶或者绿茶

public class MakeGreenTea extends MakeTea{
    @Override
    public void takeTae() {
        System.out.println("去拿绿茶");
    }
}
​
public class MakeFlowerTea extends MakeTea{
    @Override
    public void takeTae() {
        System.out.println("去拿花茶");
    }
}

3、测试

public static void main(String[] args) {
    //准备泡花茶
    MakeFlowerTea flowerTea = new MakeFlowerTea();
    flowerTea.make();
    System.out.println("=================");
    //准备泡绿茶
    MakeGreenTea greenTea = new MakeGreenTea();
    greenTea.make();
}
​
//测试结果
烧水
去拿花茶
倒茶
等待
喝茶
洗锅
=================
烧水
去拿绿茶
倒茶
等待
喝茶
洗锅
​
Process finished with exit code 0

总之,模板方法模式适用于当算法的基本骨架已经确定,但某些特定步骤的实现可能会在子类中发生变化的场景,它能通过抽象出模板方法来封装算法过程,并通过抽象方法延迟到子类中实现特定步骤,从而提高代码的重用性和扩展性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值