【模版方法设计模式】

文章目录

模板方法设计模式

模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变算法结构的情况下,重新定义算法中的某些步骤。

这种设计模式的主要目的是让某些方法的具体实现推迟到子类中去完成,提供一种代码复用的机制。

模板方法的设计原则

1.单一职责:一个类和方法只做一件事。

2.开闭原则:对修改关闭,对扩展开发。

3.里氏替换原则:子类可扩展新方法,但不可修改父类已有方法(父类已提供了具体实现的方法)。

4.依赖倒置:依赖于抽象,而非具体实现,即面向接口编程(如方法参数,类属性使用接口声明,这样可接收任何子类)。

5.接口隔离:使用多个隔离的接口定义抽象,降低耦合。

6.最少知道/迪米特原则:降低类之间的依赖,聚合,组合等。

模板方法设计模式组成部分

抽象类(Abstract Class):

包含了模版方法及其所需的基本操作方法。

模版方法定义了算法的骨架,通常是由一些基本操作方法组成的步骤。

基本操作方法可以是抽象的(需要子类实现)或具体的(提供默认实现)。

具体子类(Concrete Class):

实现了抽象类中的基本操作方法。

通过重写基本操作方法,子类可以定制算法的某些步骤。

代码实现

抽象类实现

java 复制代码
// 抽象类,定义了制作饮料的算法骨架
abstract class Beverage {
    // 模版方法,定义了制作饮料的步骤
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 基本操作方法
    protected abstract void brew();  // 子类实现
    protected abstract void addCondiments();  // 子类实现

    private void boilWater() {
        System.out.println("Boiling water");
    }

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

具体实现类

java 复制代码
// 具体子类,具体实现制作茶的步骤
class Tea extends Beverage {
    @Override
    protected void brew() {
        System.out.println("Steeping the tea");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding lemon");
    }
}

// 具体子类,具体实现制作咖啡的步骤
class Coffee extends Beverage {
    @Override
    protected void brew() {
        System.out.println("Dripping coffee through filter");
    }

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

执行

java 复制代码
// 客户端代码
public class TemplateMethodPatternDemo {
    public static void main(String[] args) {
        Beverage tea = new Tea();
        tea.prepareRecipe();

        Beverage coffee = new Coffee();
        coffee.prepareRecipe();
    }
}
相关推荐
异常君2 分钟前
Spring 中的 FactoryBean 与 BeanFactory:核心概念深度解析
java·spring·面试
weixin_4612594115 分钟前
[C]C语言日志系统宏技巧解析
java·服务器·c语言
cacyiol_Z18 分钟前
在SpringBoot中使用AWS SDK实现邮箱验证码服务
java·spring boot·spring
竹言笙熙30 分钟前
Polarctf2025夏季赛 web java ez_check
java·学习·web安全
写bug写bug43 分钟前
手把手教你使用JConsole
java·后端·程序员
异常君1 小时前
Java 中 try-catch 的性能真相:全面分析与最佳实践
java·面试·代码规范
程序员清风2 小时前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试
幼稚园的山代王2 小时前
Prompt Enginering(提示工程)先进技术
java·人工智能·ai·chatgpt·langchain·prompt
周某某~2 小时前
二.单例模式‌
java·单例模式·设计模式