C#设计模式之Template Method
来源:互联网 发布:网络兼职广告 编辑:程序博客网 时间:2024/05/21 07:09
名称:Template Method
结构:
意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
适用性 :
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e 和J o h n s o n 所描述过的“重分解以一般化”的一个很好的例子[ O J 9 3 ]。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
- 控制子类扩展。模板方法只在特定点调用“HOOK ”操作,这样就只允许在这些点进行扩展。
示例代码:
// Template Method
namespace TemplateMethod_DesignPattern
{
using System;
class Algorithm
{
public void DoAlgorithm()
{
Console.WriteLine("In DoAlgorithm");
// do some part of the algorithm here
// step1 goes here
Console.WriteLine("In Algorithm - DoAlgoStep1");
// . . .
// step 2 goes here
Console.WriteLine("In Algorithm - DoAlgoStep2");
// . . .
// Now call configurable/replacable part
DoAlgoStep3();
// step 4 goes here
Console.WriteLine("In Algorithm - DoAlgoStep4");
// . . .
// Now call next configurable part
DoAlgoStep5();
}
virtual public void DoAlgoStep3()
{
Console.WriteLine("In Algorithm - DoAlgoStep3");
}
virtual public void DoAlgoStep5()
{
Console.WriteLine("In Algorithm - DoAlgoStep5");
}
}
class CustomAlgorithm : Algorithm
{
public override void DoAlgoStep3()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
}
public override void DoAlgoStep5()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
}
}
/// <summary>
/// Summary description for Client.
/// </summary>
public class Client
{
public static int Main(string[] args)
{
CustomAlgorithm c = new CustomAlgorithm();
c.DoAlgorithm();
return 0;
}
}
}
namespace TemplateMethod_DesignPattern
{
using System;
class Algorithm
{
public void DoAlgorithm()
{
Console.WriteLine("In DoAlgorithm");
// do some part of the algorithm here
// step1 goes here
Console.WriteLine("In Algorithm - DoAlgoStep1");
// . . .
// step 2 goes here
Console.WriteLine("In Algorithm - DoAlgoStep2");
// . . .
// Now call configurable/replacable part
DoAlgoStep3();
// step 4 goes here
Console.WriteLine("In Algorithm - DoAlgoStep4");
// . . .
// Now call next configurable part
DoAlgoStep5();
}
virtual public void DoAlgoStep3()
{
Console.WriteLine("In Algorithm - DoAlgoStep3");
}
virtual public void DoAlgoStep5()
{
Console.WriteLine("In Algorithm - DoAlgoStep5");
}
}
class CustomAlgorithm : Algorithm
{
public override void DoAlgoStep3()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
}
public override void DoAlgoStep5()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
}
}
/// <summary>
/// Summary description for Client.
/// </summary>
public class Client
{
public static int Main(string[] args)
{
CustomAlgorithm c = new CustomAlgorithm();
c.DoAlgorithm();
return 0;
}
}
}
- C#设计模式之Template Method
- C#设计模式之模板方法模式(Template Method)
- 无废话C#设计模式之十五:Template Method
- 无废话C#设计模式之十四:Template Method
- 无废话C#设计模式之十四:Template Method
- JAVA设计模式之Template Method模式
- 设计模式之Template Method模式
- 设计模式之Template Method(1)
- 设计模式之Template Method(2)
- 设计模式 之 Template Method pattern
- 设计模式之 template method 与 visitor
- 初学设计模式之Template Method
- 每天一个设计模式之Template Method
- 设计模式之Template Method (模板方法)
- 【设计模式】之九Template Method
- cocoa设计模式之Template Method
- Android设计模式之美---Template Method
- Android设计模式2之Template Method
- NSIS使用
- 软件项目管理.软件管理过程框架(生命周期阶段,过程中的制品)
- DirectX 入门例程
- C#2.0中的可空类型Nullable
- Eclipse中功能最强、最专业的插件-MyEclipse(附注册码)
- C#设计模式之Template Method
- C#设计模式之Builder
- windows 2000下"root/microsoftdns" 无效名称空间的解决方法
- WINCE5.0下开发winform应用程序一
- Windows下Linux开发环境设置--安装Cygwin及交叉编译工具链
- 关于 mutex 的调试实例
- C++、Java和C#的特性比较
- dwr介绍及概念
- 无刷新的四级联动下拉框实例(AjaxPro)