【模版方法设计模式】

文章目录

模板方法设计模式

模版方法设计模式(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();
    }
}
相关推荐
凡人叶枫13 分钟前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
亓才孓24 分钟前
[JDBC]批处理
java
春日见25 分钟前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
锐意无限29 分钟前
Swift 扩展归纳--- UIView
开发语言·ios·swift
低代码布道师29 分钟前
Next.js 16 全栈实战(一):从零打造“教培管家”系统——环境与脚手架搭建
开发语言·javascript·ecmascript
宋小黑38 分钟前
JDK 6到25 全版本网盘合集 (Windows + Mac + Linux)
java·后端
念何架构之路1 小时前
Go进阶之panic
开发语言·后端·golang
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 小时前
Spring-cloud\Eureka
java·spring·微服务·eureka
亓才孓1 小时前
[Properties]写配置文件前,必须初始化Properties(引用变量没执行有效对象,调用方法会报空指针错误)
开发语言·python
傻乐u兔1 小时前
C语言进阶————指针3
c语言·开发语言