首页 > 其他分享 >模板方法模式

模板方法模式

时间:2024-09-17 15:14:27浏览次数:10  
标签:子类 void 模式 算法 println 方法 模板

模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。

模板方法模式的关键要素

  1. 抽象类(Abstract Class): 定义了算法的骨架,包含一个模板方法(Template Method),该方法中定义了一系列步骤。某些步骤可以由抽象方法(Abstract Method)来表示,这些方法由子类实现。
  2. 模板方法(Template Method): 这是在抽象类中定义的一个具体方法,它按某个顺序调用抽象方法和其他具体方法来完成算法的执行流程。
  3. 具体子类(Concrete Class): 子类继承自抽象类,并实现其中的抽象方法,具体化算法中的某些步骤。

模板方法模式的示例

假设我们要制作一杯饮料,制作饮料的过程是一个固定的流程,但具体的步骤可能会因饮料类型而有所不同。我们可以使用模板方法模式来实现。

// 抽象类
abstract class Beverage {
    // 模板方法
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 具体方法
    void boilWater() {
        System.out.println("烧开水");
    }

    // 抽象方法
    abstract void brew();
    abstract void addCondiments();

    // 具体方法
    void pourInCup() {
        System.out.println("倒入杯中");
    }
}
// 具体子类
public class Coffee extends Beverage{
    @Override
    void brew() {
        System.out.println("过滤咖啡");
    }

    @Override
    void addCondiments() {
        System.out.println("添加糖和牛奶");
    }
}
// 具体子类
public class Tea extends Beverage  {
    @Override
    void brew() {
        System.out.println("泡茶");
    }

    @Override
    void addCondiments() {
        System.out.println("添加柠檬");
    }
}
//test
public class TestTemplateMethodPattern {
    public static void main(String[] args) {
        System.out.println("制作咖啡:");
        Beverage coffee = new Coffee();
        coffee.prepareRecipe();

        System.out.println("-------------------");

        System.out.println("制作茶:");
        Beverage tea = new Tea();
        tea.prepareRecipe();
    }
}

模板方法模式的优点

  1. 代码复用:通过定义模板方法,避免了在多个子类中重复编写相同的算法步骤。
  2. 易于扩展:新的子类可以不改变现有代码的情况下通过继承并实现新的方法,扩展算法的步骤。
  3. 控制流程:通过模板方法,父类可以控制子类的行为,确保算法步骤按规定的顺序执行。

模板方法模式的缺点

  1. 增加类数量:每个具体实现都需要一个新的子类,可能会导致类的数量增多,增加系统的复杂性。
  2. 实现不够灵活:父类中对算法步骤的固定顺序限制了子类对流程的灵活性。

适用场景

  • 当你希望子类可以定制算法的某些步骤,而算法的整体结构在多个子类中是通用时。
  • 当多个类中有相似的操作步骤,但具体实现细节不同,且需要遵循固定的步骤顺序时。

模板方法模式是一种强大的设计模式,在需要复用算法结构而允许部分步骤变化的场景下非常适用。

标签:子类,void,模式,算法,println,方法,模板
From: https://www.cnblogs.com/20lxj666/p/18396287

相关文章

  • 策略模式
    策略模式策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式允许算法在不影响客户端的情况下变化,从而提高了代码的灵活性和可维护性。策略模式的组成策略模式由以下几个部分组成:抽象策略(Strategy):这是一个接口或抽象......
  • 命令模式
    命令模式命令模式(CommandPattern)是行为型设计模式之一,它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,以及对请求排队或记录请求日志等操作。通过使用命令模式,命令的发出者与命令的执行者可以完全解耦。命令模式的结构Command(命令接口/抽象类):定义了执行命令......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。责任链模式的主要角色:抽象处理者(Handler):定......
  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......
  • 单列模式
    单列模式“单例模式(SingletonPattern),用于确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这个模式在需要控制资源的访问或者确保某些操作只有一个实例时使用。单例模式的特点唯一性:保证一个类只有一个实例。全局访问:提供一个全局的访问点来获取这个实例。延迟......
  • 23种设计模式
    23种设计模式设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:1.创建型模式1.1单例模式(Singleton)目的:确保一个类只有一个实例,并提供一个全局访问点。适用场......
  • 适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,用于解决接口不兼容的问题。它的主要作用是将一个类的接口转换成客户端期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以一起工作。概念目标接口(Target):客户端期望使用的接口。源接口(Adaptee):需要被......
  • 原型模式
    原型模式原型模式(PrototypePattern)是一种创建型设计模式,其主要目的是通过复制现有的对象来创建新的对象,而不是通过构造函数进行实例化。这个模式的核心思想是“克隆”现有对象,以获得新的实例,尤其是在创建成本较高的情况下非常有用。原型模式通常涉及以下几个角色:原型(Prototyp......
  • 建造者模式
    建造者模式建造者模式(BuilderPattern)是一种创建型设计模式,它用于分步骤地创建复杂对象,而无需直接调用构造函数。通过将对象的构建过程与其表示(即对象内部细节的实现)分离,建造者模式允许创建不同的对象表示,同时保持构造过程的一致性。特点分步骤创建:建造者模式将对象的创建过程......
  • 抽象工厂模式
    抽象工厂模式抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式常用于需要创建一组相关或依赖对象的场景,确保这些对象在不同的环境中可以协同工作。特点抽象工厂:定义了一组创......