设计模式-模板方式模式

模板方式模式:

        模板方法模式(Template Method Pattern)是属于行为型的设计模式,它在抽象类中定义了一个算法的骨架,让子类实现具体行为,而不改变算法的整体结构。这种模式让子类在不修改父类核心逻辑的情况下,重新定义子类步骤的行为。

角色和结构:

1 AbstractClass(抽象类)

  • 定义了算法的框架,由一系列的方法组成,这些方法可以是具体方法(已实现),也可以是抽象方法(未实现,留给子类去实现)。
  • 其中最重要的是一个模板方法(Template Method),这个方法定义了算法的骨架,调用了一系列基本方法来完成整个算法流程。

2 ConcreteClass(具体类)

  • 继承自 AbstractClass 的具体子类,必须实现父类中声明的所有抽象方法。
  • 子类可以通过重写父类中的钩子方法(Hook Method)来对算法的不同步骤进行定制化处理。

工作原理:

  • 模板方法是一个受保护或公开的抽象方法,在该方法中定义了算法的各个步骤以及执行顺序。
  • 可以是抽象方法或具体方法,它们代表了算法的原子操作,可能由抽象类或者子类实现。   

 

示例代码: 

模板方式模式的java示例代码如下:

// 抽象类:定义模板方法和基本方法
abstract class AbstractCook {
    // 模板方法
    public final void makeMeal() {
        prepareIngredients();
        cookFood();
        serveFood();
    }

    // 基本方法
    abstract void prepareIngredients();

    // 基本方法
    abstract void cookFood();

    // 具体方法
    void serveFood() {
        System.out.println("Serving the food...");
    }
}

// 具体类:实现抽象类中的抽象方法
class ChineseCook extends AbstractCook {
    @Override
    void prepareIngredients() {
        System.out.println("Preparing Chinese ingredients...");
    }

    @Override
    void cookFood() {
        System.out.println("Cooking Chinese food...");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        AbstractCook cook = new ChineseCook();
        cook.makeMeal();
    }
}

  说明:在上面代码中AbstractCook 类定义了一个做菜的模板方法 makeMeal(),其中包含了三个步骤:准备食材、煮食物和上菜。而 ChineseCook 类作为具体子类实现了 prepareIngredients() 和 cookFood() 这两个基本方法,从而完成了中式菜肴的制作流程。

优点:

  • 提高代码复用性:将相同的部分提取到抽象类中,不同的部分由子类实现。
  • 分离关注点:将算法的不变部分与可变部分分离,使得算法结构更加清晰。
  • 简化子类的设计:子类只需要关心需要变化的步骤,不需要了解算法的整体结构。

应用场景:

  • 当多个类包含相同的算法实现,但每个类都有一些步骤不同时。

 

你可能感兴趣的:(设计模式,java,开发语言)