模板方法模式算法
1 适用状况:c#
当咱们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不一样时,咱们一般考虑用模板方法模式来处理.设计模式
2 定义:ide
定义一个操做中的算法的骨架,而将一些步骤延迟到子类中.设计
模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤.
code
3 例子: (引用于《大话设计模式》)
继承
1) AbstractClass是抽象类,定义实现了一个模板方法,这个模板方法通常是一个具体方法.这就是一个顶级逻辑的骨架,而逻辑的组成步骤则在相应的抽象操做中,推迟到子类实现.
string
abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
2) ConcreteClass类继承抽象类AbstractClass,不一样的ConcreteClass能够给出抽象方法的不一样实现.
it
class ConcreteClassA:AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類A方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類A方法2實現"); } } class ConcreteClassB : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類B方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類B方法2實現"); } }
3)客户端调用以下:io
class Program { static void Main(string[] args) { AbstractClass c; c = new ConcreteClassA(); c.TemplateMethod(); c = new ConcreteClassB(); c.TemplateMethod(); Console.Read(); } }