设计模式-模板方式模式

模板方式模式:

        模板方法模式(Template Method Pattern)是属于行为型的设计模式,它在抽象类中定义了一个算法的骨架,让子类实现具体行为,而不改变算法的整体结构。这种模式让子类在不修改父类核心逻辑的情况下,重新定义子类步骤的行为。

角色和结构:

1 AbstractClass(抽象类)

  • 定义了算法的框架,由一系列的方法组成,这些方法可以是具体方法(已实现),也可以是抽象方法(未实现,留给子类去实现)。
  • 其中最重要的是一个模板方法(Template Method),这个方法定义了算法的骨架,调用了一系列基本方法来完成整个算法流程。

2 ConcreteClass(具体类)

  • 继承自 AbstractClass 的具体子类,必须实现父类中声明的所有抽象方法。
  • 子类可以通过重写父类中的钩子方法(Hook Method)来对算法的不同步骤进行定制化处理。

工作原理:

  • 模板方法是一个受保护或公开的抽象方法,在该方法中定义了算法的各个步骤以及执行顺序。
  • 可以是抽象方法或具体方法,它们代表了算法的原子操作,可能由抽象类或者子类实现。   

 

示例代码: 

模板方式模式的java示例代码如下:

// 抽象类:定义模板方法和基本方法
abstract class AbstractCook {
    // 模板方法
    public final void makeMeal() {
        prepareIngredients();
        cookFood();
        serveFood();
    }

    // 基本方法
    abstract void prepareIngredients();

    // 基本方法
    abstract void cookFood();

    // 具体方法
    void serveFood() {
        System.out.println("Serving the food...");
    }
}

// 具体类:实现抽象类中的抽象方法
class ChineseCook extends AbstractCook {
    @Override
    void prepareIngredients() {
        System.out.println("Preparing Chinese ingredients...");
    }

    @Override
    void cookFood() {
        System.out.println("Cooking Chinese food...");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        AbstractCook cook = new ChineseCook();
        cook.makeMeal();
    }
}

  说明:在上面代码中AbstractCook 类定义了一个做菜的模板方法 makeMeal(),其中包含了三个步骤:准备食材、煮食物和上菜。而 ChineseCook 类作为具体子类实现了 prepareIngredients() 和 cookFood() 这两个基本方法,从而完成了中式菜肴的制作流程。

优点:

  • 提高代码复用性:将相同的部分提取到抽象类中,不同的部分由子类实现。
  • 分离关注点:将算法的不变部分与可变部分分离,使得算法结构更加清晰。
  • 简化子类的设计:子类只需要关心需要变化的步骤,不需要了解算法的整体结构。

应用场景:

  • 当多个类包含相同的算法实现,但每个类都有一些步骤不同时。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qyhua

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

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

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

打赏作者

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

抵扣说明:

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

余额充值