模版方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是非常简单而且几乎是无处不用,很少有人没有用过它。
类结构图
示列代码如下:
abstract class AbstractClass
{
public abstract void MethodA();
public abstract void MethodB();
public void TemplateMethod()
{
primitiveOperation1();
primitiveOperation2();
Console.write("");
}
}
public class ClassA : AbstractClass
{
public override void MethodA()
{
Console.writeline("具体类a方法MethodA的实现");
}
public override void MethodB()
{
Console.writeline("具体类a方法MethodB的实现");
}
}
public class ClassB : AbstractClass
{
public override void MethodA()
{
Console.writeline("具体类B方法MethodA的实现");
}
public override void MethodB()
{
Console.writeline("具体类B方法MethodB的实现");
}
}
//客户端调用
static void Main(string[] args)
{
AbstractClass c;
c = new ClassA();
c.TemplateMethod();
c = new ClassB();
c.TemplateMethod();
}
,
可以看到类A和类B都有方法:MethodA和MethodB,但它们的实现是不一样的,所以将它们不变的结构抽象出来作为基类,子类可以重新定义实现的细节,这样就是模板方法模式
特点:
1.Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2.除了可以灵活应对子步骤的变化外,“不用调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
3.在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法,纯虚方法),但一般推荐将它们设置为protected方法。