代码改变世界

设计模式之模板方法模式(TemplateMethod)

2010-01-18 20:44  key_sky  阅读(157)  评论(0编辑  收藏  举报

模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,即把不变行为搬移到超类

AbstractClass1.cs:

代码
using System;
using System.Collections.Generic;
using System.Text;

//模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板
//方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
//当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我
//们通过模板方法模式把这些行为搬移到单一的地方,即把不变行为搬移到超类
namespace TemplateMethod
{
class AbstractClass1
{
}

//抽象类
abstract class AbstracClass
{
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
//抽象类行为,放到子类实现

public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine(
"");
}
//模板方法,定义逻辑骨架,推迟到子类实现
}

//具体类
class ConcreteClassA : AbstracClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine(
"具体类A方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine(
"具体类A方法2实现");
}
}

class ConcreteClassB : AbstracClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine(
"具体类B方法1实现");
}
public override void PrimitiveOperation2()
{
Console.WriteLine(
"具体类B方法2实现");
}
}
}

Program.cs:

代码
using System;
using System.Collections.Generic;
using System.Text;

namespace TemplateMethod
{
class Program
{
static void Main(string[] args)
{
AbstracClass c;

c
= new ConcreteClassA();
c.TemplateMethod();

c
= new ConcreteClassB();
c.TemplateMethod();

Console.Read();
}
}
}

运行结果:

具体类A方法1实现

具体类A方法2实现

 

具体类B方法1实现

具体类B方法2实现