【模版方法设计模式】

文章目录

模板方法设计模式

模版方法设计模式(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();
    }
}
相关推荐
时间的拾荒人1 小时前
C语言字符函数与字符串函数完全指南
c语言·开发语言
帅次1 小时前
Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
android·java·面试
蓝胖的四次元口袋1 小时前
Java集合(4)
java·哈希算法
2501_948106911 小时前
计算机毕业设计之基于jsp教科研信息共享系统
java·开发语言·信息可视化·spark·课程设计
TanYYF1 小时前
spring ai入门教程二
java·人工智能·spring
SeeYa-J2 小时前
Spring IOC(Inversion of Control)
java·spring·rpc
取经蜗牛2 小时前
Python 第一阶段完全指南:从零到第一个实用工具
开发语言·python
不会c+2 小时前
02-SpringBoot配置文件
java·spring boot·后端
AI 大模型学习不踩坑2 小时前
OpenClaw 完整教程:从安装到使用(官方脚本版)
java·人工智能·神经网络·机器学习·计算机视觉·自然语言处理·openclaw
dog2502 小时前
从重尾到截断流量模型的演进
开发语言·php