模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是通过把不变行为搬移到父类,去除子类中重复的代码来体现它的优势。
模板方法模式提供了一个很好的代码复用的平台。结构图:
AbstractClass定义:
abstract class AbstractClass
{
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
{
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
ConcreteClass类:
class ConcreteClassA :AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassA方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassA方法2实现");
}
}
{
public override void PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassA方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassA方法2实现");
}
}
class ConcreteClassB :AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassB方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassB方法2实现");
}
}
{
public override void PrimitiveOperation1()
{
Console.WriteLine("ConcreteClassB方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("ConcreteClassB方法2实现");
}
}
主函数调用:
class Program
{
static void Main(string[] args)
{
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethod();
c = new ConcreteClassB();
c.TemplateMethod();
Console.ReadKey();
}
}
{
static void Main(string[] args)
{
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethod();
c = new ConcreteClassB();
c.TemplateMethod();
Console.ReadKey();
}
}