模板模式(Template)是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要.所以模板模式可以理解为定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定处理步骤.
变化一直以来都是软件设计的永恒话题,在XP(极限编程)编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化,如何更好的提高代码复用,通过学习模板模式,您应该有一个新的认识.
public abstract class AbstractTemplate
{
public abstract void ReadFile();
public abstract void ReadDatabase();
public abstract void Initialize();
public void Startup()
{
ReadFile();
ReadDatabase();
Initialize();
}
} // class AbstractTemplate
public class Scheduler : AbstractTemplate
{
public override void ReadFile()
{
}
public override void ReadDatabase()
{
}
public override void Initialize()
{
}
} // class Scheduler
public class Dispatcher : AbstractTemplate
{
public override void ReadFile()
{
}
public override void ReadDatabase()
{
}
public override void Initialize()
{
}
} // class Scheduler
模板模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用.它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用的基本实现结构.
除了可以灵活应对子类的变化外,“不用调用我,让我来调用你”的反向控制结构是模板的典型应用.
在具体实现方面,被模板调用的虚方法可以具有实现,也可以没有任何实现(抽象方法,纯虚方法),但一般推荐将它们设置为protected方法。
适用范围:
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分解为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
控制子类扩展。模板方法只在特定点调用“钩子”操作,这样就只允许在这些点进行扩展。
模板在.NET中的基本类库中被广泛使用,例如我们定义一个Button控件,会让其继承Button类.