0%

设计模式-行为型模式-模板方法模式

模板方法模式 - 行为型模式的骨架定义者

在软件设计中,模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将算法中的一些步骤延迟到子类中实现。模板方法模式允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。本文将深入讨论模板方法模式的概念、实现方式以及在实际应用中的使用场景。

模板方法模式的概念

模板方法模式(Template Method Pattern)是一种行为型设计模式,其核心思想是定义一个算法的骨架,将算法中的一些步骤延迟到子类中实现。模板方法模式在父类中定义算法的结构,而将具体步骤的实现交给子类。这样,子类可以在不改变算法结构的情况下重新定义算法的某些步骤。

模板方法模式的 UML 类图

classDiagram
    class AbstractClass {
        # PrimitiveOperation1(): void
        # PrimitiveOperation2(): void
        + TemplateMethod(): void
    }

    class ConcreteClass {
        + PrimitiveOperation1(): void
        + PrimitiveOperation2(): void
    }

    AbstractClass <|-- ConcreteClass

模板方法模式的实现方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;

// 抽象类
public abstract class AbstractClass
{
// 模板方法定义了算法的骨架,将某些步骤的实现交给子类
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}

// 原语操作1,延迟到子类实现
protected abstract void PrimitiveOperation1();

// 原语操作2,延迟到子类实现
protected abstract void PrimitiveOperation2();
}

// 具体类
public class ConcreteClass : AbstractClass
{
// 实现原语操作1
protected override void PrimitiveOperation1()
{
Console.WriteLine("ConcreteClass Primitive Operation 1");
}

// 实现原语操作2
protected override void PrimitiveOperation2()
{
Console.WriteLine("ConcreteClass Primitive Operation 2");
}
}

模板方法模式的应用场景

模板方法模式适用于以下情况:

  1. 多个子类有共同的算法骨架,但其中某些步骤的实现可能不同。
  2. 不想让子类改变算法的骨架,只允许改变某些具体步骤的实现。
  3. 重构时,将相同的代码抽取到父类中,形成模板方法,提高代码的复用性。

模板方法模式的优势

  1. 代码复用: 模板方法模式将相同的算法骨架封装在父类中,提高了代码的复用性。
  2. 封装变化: 模板方法模式允许子类在不改变算法结构的情况下重新定义某些步骤的实现,封装了变化。
  3. 简化子类: 子类不需要关心算法的结构,只需实现具体步骤,简化了子类的设计。

使用示例

1
2
3
4
5
6
7
8
9
10
11
class Program
{
static void Main()
{
// 创建具体类对象
ConcreteClass concreteClass = new ConcreteClass();

// 调用模板方法,实际上会执行具体类中定义的算法骨架
concreteClass.TemplateMethod();
}
}

总结

模板方法模式是一种行为型设计模式,通过定义一个算法的骨架,将算法中的一些步骤延迟到子类中实现。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤,提高了代码的复用性和灵活性。在实际应用中,模板方法模式常用于多个子类有共同的算法骨架,但其中某些步骤的实现可能不同的场景。