首页 | 网页设计 | w3c标准 | flash动画 | 平面设计 | 经典文章 | 特约专题 | 资源下载 | 健康频道 | 重庆品牌网站 | 留言簿 | 
技术文章  资源下载 经典素材  社区论坛
   
 您现在的位置: vi设计在线 >> 经典文章 >> ccqvi动态 >> 技术应用 >> 正文  
  最新IT信息-C# 定义操作中算法步骤延迟到子类中的骨架         
[ 作者:佚名    转贴自:本站原创    点击数:1585    更新时间:2010/7/13    文章录入:diyinetwork ]

减小字体 增大字体

C# 定义操作中算法步骤延迟到子类中的骨架

重庆帝一网络建设专家 http://www.diy88.com.cn

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

场景

模版方法是非常容易理解的设计模式,一来是因为它没有过多结构上的交错,二来是因为这种代码复用技术对于掌握OO知识的人来说非常容易可以想到,很可能你已经在很多地方运用了模版方法。在运用一些设计模式的时候常常也会一起运用模版方法,甚至有的设计模式本身就带有模版方法的思想。

今天,我们给出这样一个实际的例子。做过银行支付、支付宝支付的人都知道,一个支付的过程是基于两个接口的。提交接口和网关返回接口,虽然各大网关的支付接口格式不同,比如有的网关对于支付金额的参数是money,有的网关又是amount,但是从支付的提交过程来说,我们一般都会经历以下步骤:

获取订单信息,验证订单的合法性

生成用于提交到各大网关的表单

记录日志

把表单提交到相应的网关

对于各个网关,生成的提交表单以及记录日志的方式是不一样的,但是整个支付流程以及流程中的获取订单信息、提交表单的过程是一样的。由此引入模版方法模式来复用不变的部分,把可变的部分留给子类去实现。

示例代码

using System; 
using System.Collections.Generic; 
using System.Text; 
namespace TemplateMethodExample 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
  PayGateway pg = new IPSGateway(); 
  pg.SubmitOrder(new Order()); 
} 
} 
class Order 
{ 
} 
class SubmitForm 
{ 
} 
abstract class PayGateway 
{ 
protected abstract void WriteLog(SubmitForm sf); 
protected abstract SubmitForm GenerateOrderForm(Order order); 
public void SubmitOrder(Order order) 
{ 
 if (order == null) 
 { 
    Console.WriteLine("Invalid Order"); 
    return; 
  } 
  SubmitForm sf = GenerateOrderForm(order); 
  if (sf == null) 
  { 
    Console.WriteLine("Generate Submit Form Failed"); 
    return; 
  } 
  WriteLog(sf); 
} 
} 
class IPSGateway : PayGateway 
{ 
protected override void WriteLog(SubmitForm sf) 
{ 
  Console.WriteLine("Log Wrote"); 
} 
protected override SubmitForm GenerateOrderForm(Order order) 
{ 
  Console.WriteLine("Submit Form Generated"); 
  return new SubmitForm(); 
} 
} 
}

代码执行结果如下图:

代码说明

PayGateway类型是抽象模版角色。它定义了支付过程不变的部分,并且把变化部分定义为抽象操作,让子类去实现。其中的SubmitOrder方法是模版方法。

IPSGateway类型是具体模版角色。它代表了某一种支付网关,并且按照这种支付网关的接口标准来实现生成提交表单和记录日志的操作。

何时采用

如果某些类型的操作拥有共同的实现骨架和不同的实现细节的话,可以考虑使用模版方法来封装统一的部分。

实现要点

复用算法的骨架,将可变的实现细节留给子类实现。

留给子类实现的方法需要在父类中定义,可以是抽象方法也可以是带有默认实现的方法。

注意事项

模版方法可以说是最不像设计模式的设计模式,通常很多设计模式会和模版方法一起使用。

 上一篇文章: 最新IT信息-芯片市场动向:AMD崛起 与英特尔分庭抗礼
 下一篇文章: 最新IT信息-云计算时代挑战IPV6的数量是否足够给予支撑
发表评论】【告诉好友】【打印此文】【关闭窗口


技术文章  资源下载
经典素材  社区论坛
 中大型美容美发店老…[999]
 重庆多达学习俄语培…[2200]
 重庆恒祥广告有限公…[1931]
 重庆市南方阻燃电线…[2342]
 重庆舞美灯光音响有…[3085]
 重庆德鼎滤油机有限…[1868]
 重庆民生建材有限公…[2316]
 重庆集元科技有限公…[4097]
 重庆倍润商贸有限公…[1986]
 重庆腾达展览有限公…[3055]
 帝一网络创始人宣…--[3122]
 重庆vi设计在线祝…--[2712]
 重庆帝一网络书生…--[2829]
 馋嘴鸭的起伏和经…--[2968]
 机器感觉“卡”的…--[2895]
 ActionScript3打造…--[5652]
 在ASP文件中读取H…--[7210]
 vi设计经典案例--[63567]
 帅到掉渣-爆笑版勇…--[7022]
 一个女孩写的经典…--[6788]
没有相关文章
 (只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    没有任何评论
设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 重庆网站建设 | 
版权所有: vi设计在线  © 2005-2018 网站备案序号:渝ICP备06003824号
技术支持:帝一网络(重庆网站建设专家)