Skip to content

Head First 设计模式 09-模板方法模式

🏷️ 《Head First 设计模式》

模板方法模式 在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

最常见的模板方法模式就是列表的排序方法了,C# 示例如下:

csharp
var arr = new List<string>() { "1", "3", "2" };
arr.Sort((a, b) => a.CompareTo(b));

Sort 方法传递的参数是 Comparison<T> 类型,其本质是一个代理(delegate)。定义如下:

csharp
public delegate int Comparison<in T>(T x, T y);

示例代码

AbstractClass

Java 中模板方法应加上 final 关键字,以防止子类重写该方法。

csharp
public abstract class AbstractClass
{
    public void TemplateMethod()
    {
        PrimitiveOperation1();
        PrimitiveOperation2();
    }

    public abstract void PrimitiveOperation2();
    public abstract void PrimitiveOperation1();
}

ConcreteClass

csharp
public class ConcreteClass : AbstractClass
{
    public override void PrimitiveOperation1()
    {
    }

    public override void PrimitiveOperation2()
    {
    }
}

设计原则

No.8 好莱坞原则

别调用(call)我们,我们会调用(call)你。

在好莱坞原则之下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些低层组件。