模板方法设计模式应用案例

定义

模板方法设计模式(Template Method Pattern)是一种行为设计模式,它在父类中定义一个算法的框架,允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式非常适合于那些有一定流程固定,但某些步骤可以变化的场景。

UML类图

案例

假设我们有一个咖啡店,咖啡店中有多种咖啡,如美式咖啡、拿铁、卡布奇诺等。每种咖啡的制作流程大致相同,烧水、煮咖啡、倒入杯中、调配,但有一些步骤是不同的。我们可以使用模板方法设计模式来定义一个统一的制作流程,同时允许每种咖啡在特定步骤中有所不同。

实现

1. 定义抽象咖啡类

public abstract class Coffee {
    // 模板方法,定义制作咖啡的流程
    public final void prepareRecipe() {
        boilWater();
        brewCoffee();
        pourInCup();
        addCondiments();
    }

    // 钩子方法,子类可以覆盖这些方法来定义特定行为
    protected void boilWater() {
        System.out.println("Boiling water");
    }

    protected abstract void brewCoffee();

    protected void pourInCup() {
        System.out.println("Pouring into cup");
    }

    protected void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

2. 创建具体咖啡类

美式咖啡
public class Americano extends Coffee {
    @Override
    protected void brewCoffee() {
        System.out.println("Dripping coffee through filter");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding nothing");
    }
}
拿铁
public class Latte extends Coffee {
    @Override
    protected void brewCoffee() {
        System.out.println("Brewing espresso");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding steamed milk");
    }
}
卡布奇诺
public class Cappuccino extends Coffee {
    @Override
    protected void brewCoffee() {
        System.out.println("Brewing espresso");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding steamed milk and froth");
    }
}

3. 客户端代码

public class CoffeeShop {
    public static void main(String[] args) {
        Coffee coffee;

        coffee = new Americano();
        coffee.prepareRecipe();

        coffee = new Latte();
        coffee.prepareRecipe();

        coffee = new Cappuccino();
        coffee.prepareRecipe();
    }
}

在这个案例中,Coffee类定义了一个模板方法prepareRecipe,它规定了制作咖啡的步骤顺序:烧水、煮咖啡、倒入杯中、加调料。每个具体的咖啡类(如AmericanoLatteCappuccino)都继承自Coffee类,并根据需要重写brewCoffeeaddCondiments方法来实现特定的制作步骤。

这种设计模式的好处是,我们可以在不修改现有代码的情况下引入新的咖啡种类,只需创建新的子类并实现特定的步骤即可。同时,保持了咖啡制作流程的一致性,易于维护和扩展。

应用场景

去银行办理业务时,通常都需要三个大步骤,取号、业务办理和服务评价,其中取号和服务评价是相同的,而业务办理则是有差异的,如存款、取款、开户、办理信用卡等,这就是一个典型模板方法应用场景。

开发平台对业务实体增删改查时,同样可以采用模板方法,可以在操作前和操作后加入“钩子”方法,例如在创建用户时,在新增前操作中判断账号是否已存在;在删除部门前,判断部门下是否有人员,有则移动到未分配部门下。

个人经验分享

  1. 全面了解:23种模式需要了解,首先得知道,在做系统设计的时候才会想到,有意识地使用。
  2. 借鉴思路:学习时不要死记硬背,场景驱动,侧重理解解决问题的设计思路,具体设计时,可以借鉴和参考思路,因此不一定完整运用设计模式,设计模式也有很多变种,甚至复杂问题需要组合使用的多种设计模式。
  3. 抓重点:23种设计模式,不需要平均分配时间精力,一方面,部分设计模式比较基础,如迭代器模式、享元模式,往往已封装在底层的jdk或中间件中了,通常直接使用,无需自行实现;另一方面,部分设计模式比较生僻,如抽象工厂、解释器,仅适用于特殊的场景,日常几乎不会使用到。对于这两类设计模式,需要了解应用场景和解决问题的实现思路即可。
  4. 重应用:企业应用开发,侧重于业务逻辑的实现,大多数功能用不上设计模式。但一些系统的复杂点、难点,如适合设计模式的应用场景,使用设计模式后会大幅提升系统的灵活性和扩展性。
  5. 经常复习:每隔2年左右,复习一遍,每次都有新的收获。

设计模式是技术人员的“内功”,需要持续“修炼”。


如果您在阅读本文时获得了帮助或受到了启发,希望您能够喜欢并收藏这篇文章,为它点赞~
请在评论区与我分享您的想法和心得,一起交流学习,不断进步,遇见更加优秀的自己!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者无疆1982

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值