Head First 设计模式 09-模板方法模式
模板方法模式 在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
最常见的模板方法模式就是列表的排序方法了,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)你。
在好莱坞原则之下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些低层组件。