定义
模板方法模式(Template Method Pattern): 定义一个操作中算法的骨架,将这些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
C#例子
/// <summary>
/// 模板
/// </summary>
public abstract class AbstractClass
{
/// 子类需要实现此方法
protected abstract int _count();
protected abstract int _add();
/// <summary>
/// 一个算法,或者一个过程。
/// </summary>
/// <param name="input"></param>
public void Count(int input) {
var result = this._count()*input+_add()-20;
Console.WriteLine(result);
}
}
/// <summary>
/// 实现10倍+100
/// </summary>
public class ConcreteClass10 : AbstractClass
{
protected override int _add()
{
return 100;
}
protected override int _count()
{
return 10;
}
}
/// <summary>
/// 实现20倍+2
/// </summary>
public class ConcreteClass20 : AbstractClass
{
protected override int _add()
{
return 2;
}
protected override int _count()
{
return 20;
}
}
模板方法模式参与者:
- AbstractClass:定义一个模板,其子类将重定义_count和_add操作。
- ConcreteClass*:实现_count和_add以完成算法中与特定子类相关的内容。
模板方法模式适用情形:
- 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
- 控制子类扩展。模板方法只允许在特定点进行扩展,而模板部分则是稳定的。
模板方法模式特点:
- TemplateMethod模式是一种非常基础性的设计模式,在面向对象系统中大量应用。它用最简洁的机制(基础、多态)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
- 在具体实现方面,被TemplateMethod调用的虚方法可以具有实现,也可以没有任何实现(抽象方法或虚方法)。但一般推荐将它们设置为protected方法使得只有子类可以访问它们。
- 模板方法模式通过对子类的扩展增加新的行为,符合“开闭原则”。
其他
源码地址
其他设计模式
网友评论