设计模式之模板方法模式

模板方法模式是一种行为型设计模式,它定义了算法的骨架并在抽象类中实现,允许子类替换具体步骤。文章通过制作豆浆的例子解释了模板方法模式的两个角色:抽象模板和具体模板,并展示了如何使用钩子方法增加灵活性。模式的应用场景包括执行一系列基本相同但个别步骤可能不同的操作。
摘要由CSDN通过智能技术生成

模板方法模式

模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式执行。

简单的说,模板方法模式定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构,就可以重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。

模板方法模式的两个角色

  • AbstractTemplate(抽象模板):抽象类,类中实现了模板方法(Template),定义了算法的骨架(执行顺序),具体子类需要去实现其它的抽象方法。
  • ConcreteTemplate(具体模板):实现AbstractTemplate中的抽象方法,以完成算法中符合子类特点的步骤。
image-20200922222243314

举一个栗子

这里举一个制作豆浆的例子,制作豆浆的流程如下:选材—>添加配料—>浸泡—>放到豆浆机打碎。

通过添加不同的配料,可以制作不同口味的豆浆,选材、浸泡和放到豆浆机打碎这几个步骤都是一样的,但是添加配料不同的豆浆不同。

SoyaMilk:模板类

创建一个抽象类,模板方法make()需要用final修饰防止子类修改。由于不同口味豆浆添加的配料不同,所用addCondiments()方法为抽象方法,需要由子类根据自己的情况去实现。

package cn.personalweb.template;

public abstract class SoyaMilk {
   
    final void make() {
   
        select();
        addCondiments();
        soak();
        beat();
    }

    /**
     * 选材料
     */
    void select() {
   
        System.out.println("第一步:选择上好黄豆.");
    }

    /**
     * 添加配料
     */
    abstract void addCondiments();

    /**
     * 浸泡
     */
    void soak() {
   
        System.out.println("第三步: 黄豆和配料开始浸泡三小时.");
    }

    /**
     * 黄豆打碎
     */<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值