【Java 设计模式】行为型之模版方法模式

文章目录

    • 1. 定义
    • 2. 应用场景
    • 3. 代码实现
    • 结语

模板方法模式(Template Method Pattern)是一种行为型设计模式,用于定义算法的框架,并将一些步骤的实现延迟到子类。模板方法模式通过定义一个算法骨架,将具体步骤的实现推迟到子类,使得子类可以在不改变算法结构的情况下重定义算法的某些步骤。在本文中,我们将深入研究Java中模板方法模式的定义、结构、使用场景以及如何在实际开发中应用。

1. 定义

模板方法模式是一种行为型设计模式,用于定义算法的框架,并将一些步骤的实现延迟到子类。模板方法模式通过定义一个算法骨架,将具体步骤的实现推迟到子类,使得子类可以在不改变算法结构的情况下重定义算法的某些步骤。模板方法模式通常包含两个主要角色:抽象模板(Abstract Template)和具体模板(Concrete Template)。

  • 抽象模板(Abstract Template): 定义了算法的骨架,包含一些抽象的步骤,将具体步骤的实现延迟到子类
  • 具体模板(Concrete Template): 实现了抽象模板中的具体步骤,完成算法的实际实现

2. 应用场景

模板方法模式通常在以下场景中使用:

  • 算法的框架已经确定,但某些步骤的具体实现可能会变化:

    当算法的框架已经确定,但某些具体步骤的实现可能会变化时,可以使用模板方法模式

  • 重用性要求较高:

    当希望在不改变算法结构的情况下,重用算法的某些部分时,可以使用模板方法模式

  • 固定算法的框架,但允许具体步骤的实现发生变化:

    当希望固定算法的框架,但允许具体步骤的实现发生变化时,可以使用模板方法模式

3. 代码实现

下面通过一个简单的例子来演示模板方法模式的实现。假设有一个咖啡和茶的制备过程,我们可以使用模板方法模式定义一个制备饮料的框架。

抽象模板 - 制备饮料 BeverageTemplate

package com.cheney.demo;

abstract class BeverageTemplate {
    // 制备饮料的算法骨架
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 烧水
    protected void boilWater() {
        System.out.println("烧水");
    }

    // 冲泡
    protected abstract void brew();

    // 倒入杯中
    protected void pourInCup() {
        System.out.println("倒入杯中");
    }

    // 添加调料
    protected abstract void addCondiments();
}

具体模板 - 制备咖啡 Coffee

package com.cheney.demo;

class Coffee extends BeverageTemplate {
    @Override
    protected void brew() {
        System.out.println("冲咖啡");
    }

    @Override
    protected void addCondiments() {
        System.out.println("添加糖和牛奶");
    }
}

具体模板 - 制备茶 Tea

package com.cheney.demo;

class Tea extends BeverageTemplate {
    @Override
    protected void brew() {
        System.out.println("泡茶");
    }

    @Override
    protected void addCondiments() {
        System.out.println("添加柠檬");
    }
}

客户端启动类 Main

package com.cheney.demo;

public class Main {
    public static void main(String[] args) {
        // 使用模板方法模式冲咖啡和泡茶
        System.out.println("冲咖啡:");
        BeverageTemplate coffee = new Coffee();
        coffee.prepareBeverage();

        System.out.println("泡茶:");
        BeverageTemplate tea = new Tea();
        tea.prepareBeverage();
    }
}

在上述例子中,BeverageTemplate 是抽象模板,定义了制备饮料的算法骨架,包含了一些抽象的步骤,将具体步骤的实现延迟到子类。CoffeeTea 是具体模板,实现了抽象模板中的具体步骤,完成了冲咖啡和泡茶的实际实现。

在客户端中,我们使用模板方法模式冲咖啡和泡茶。通过继承抽象模板并实现其中的抽象步骤,我们可以定制不同饮料的制备过程,而不改变算法的整体结构。

结语

模板方法模式是一种用于定义算法框架,并将一些步骤的实现延迟到子类的设计模式。通过使用模板方法模式,可以固定算法的框架,同时允许具体步骤的实现发生变化,提高了代码的复用性和可维护性。在实际开发中,模板方法模式常被用于实现具体算法的共享部分,例如,GUI框架中的事件处理、Junit中的测试方法等。通过合理使用模板方法模式,可以使系统更加灵活和可扩展。

你可能感兴趣的:(设计模式,java,设计模式,python)