from:设计模式 - Strategy Pattern(策略模式)??
[源码下载]
设计模式 - Strategy Pattern(策略模式)
作者:webabcd 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里(两种可互换的算法)。由客户端决定使用哪种算法。  MessageModel
 using
?System; 
using
?System.Collections.Generic; 
using
?System.Text; 

namespace
?Pattern.Strategy 


{ 
 ????/**////?<summary>  ????///?Message实体类  ????///?</summary>  ????public?class?MessageModel 
 ???? { 
 ????????/**////?<summary>  ????????///?构造函数  ????????///?</summary>  ????????///?<param?name="msg">Message内容</param>  ????????///?<param?name="pt">Message发布时间</param>  ????????public?MessageModel(string?msg,?DateTime?pt) 
 ???????? {  ????????????this._message?=?msg;  ????????????this._publishTime?=?pt;  ????????} 
 ????????private?string?_message; 
 ????????/**////?<summary>  ????????///?Message内容  ????????///?</summary>  ????????public?string?Message 
 ???????? { 
 ????????????get? {?return?_message;?} 
 ????????????set? {?_message?=?value;?}  ????????} 
 ????????private?DateTime?_publishTime; 
 ????????/**////?<summary>  ????????///?Message发布时间  ????????///?</summary>  ????????public?DateTime?PublishTime 
 ???????? { 
 ????????????get? {?return?_publishTime;?} 
 ????????????set? {?_publishTime?=?value;?}  ????????}  ????}  }

IMessageStrategy
 using
?System; 
using
?System.Collections.Generic; 
using
?System.Text; 

namespace
?Pattern.Strategy 


{ 
 ????/**////?<summary>  ????///?策略接口  ????///?</summary>  ????public?interface?IMessageStrategy 
 ???? { 
 ????????/**////?<summary>  ????????///?获取Message  ????????///?</summary>  ????????///?<returns></returns>  ????????List<MessageModel>?Get(); 

 ????????/**////?<summary>  ????????///?插入Message  ????????///?</summary>  ????????///?<param?name="mm">Message实体对象</param>  ????????///?<returns></returns>  ????????bool?Insert(MessageModel?mm);  ????}  }

SqlMessage
 using
?System; 
using
?System.Collections.Generic; 
using
?System.Text; 

namespace
?Pattern.Strategy 


{ 
 ????/**////?<summary>  ????///?Sql方式操作Message  ????///?</summary>  ????public?class?SqlMessage?:?IMessageStrategy 
 ???? { 
 ????????/**////?<summary>  ????????///?获取Message  ????????///?</summary>  ????????///?<returns></returns>  ????????public?List<MessageModel>?Get() 
 ???????? {  ????????????List<MessageModel>?l?=?new?List<MessageModel>();  ????????????l.Add(new?MessageModel("SQL方式获取Message",?DateTime.Now)); 
 ????????????return?l;  ????????} 

 ????????/**////?<summary>  ????????///?插入Message  ????????///?</summary>  ????????///?<param?name="mm">Message实体对象</param>  ????????///?<returns></returns>  ????????public?bool?Insert(MessageModel?mm) 
 ???????? {  ????????????//?代码略  ????????????return?true;  ????????}  ????}  }

XmlMessage
 using
?System; 
using
?System.Collections.Generic; 
using
?System.Text; 

namespace
?Pattern.Strategy 


{ 
 ????/**////?<summary>  ????///?Xml方式操作Message  ????///?</summary>  ????public?class?XmlMessage?:?IMessageStrategy 
 ???? { 
 ????????/**////?<summary>  ????????///?获取Message  ????????///?</summary>  ????????///?<returns></returns>  ????????public?List<MessageModel>?Get() 
 ???????? {  ????????????List<MessageModel>?l?=?new?List<MessageModel>();  ????????????l.Add(new?MessageModel("XML方式获取Message",?DateTime.Now)); 
 ????????????return?l;  ????????} 

 ????????/**////?<summary>  ????????///?插入Message  ????????///?</summary>  ????????///?<param?name="mm">Message实体对象</param>  ????????///?<returns></returns>  ????????public?bool?Insert(MessageModel?mm) 
 ???????? {  ????????????//?代码略  ????????????return?true;  ????????}  ????}  }

Message
 using
?System; 
using
?System.Collections.Generic; 
using
?System.Text; 

namespace
?Pattern.Strategy 


{ 
 ????/**////?<summary>  ????///?Context类  ????///?</summary>  ????public?class?Message 
 ???? { 
 ????????/**////?<summary>  ????????///?声明一个IMessageStrategy类型  ????????///?</summary>  ????????private?IMessageStrategy?_strategy; 

 ????????/**////?<summary>  ????????///?构造函数  ????????///?</summary>  ????????///?<param?name="strategy">具体算法</param>  ????????public?Message(IMessageStrategy?strategy) 
 ???????? {  ????????????this._strategy?=?strategy;  ????????} 

 ????????/**////?<summary>  ????????///?获取Message  ????????///?</summary>  ????????///?<returns></returns>  ????????public?List<MessageModel>?Get() 
 ???????? {  ????????????return?_strategy.Get();  ????????} 

 ????????/**////?<summary>  ????????///?插入Message  ????????///?</summary>  ????????///?<param?name="mm">Message实体对象</param>  ????????///?<returns></returns>  ????????public?bool?Insert(MessageModel?mm) 
 ???????? {  ????????????return?_strategy.Insert(mm);  ????????}  ????}  }

client
 using
?System; 
using
?System.Data; 
using
?System.Configuration; 
using
?System.Collections; 
using
?System.Web; 
using
?System.Web.Security; 
using
?System.Web.UI; 
using
?System.Web.UI.WebControls; 
using
?System.Web.UI.WebControls.WebParts; 
using
?System.Web.UI.HtmlControls; 

using
?Pattern.Strategy; 

public
?partial?
class
?Strategy?:?System.Web.UI.Page 


{  ????protected?void?Page_Load(object?sender,?EventArgs?e) 
 ???? {  ????????Message?m?=?new?Message(new?XmlMessage());  ????????Response.Write(m.Insert(new?MessageModel("插入",?DateTime.Now)));  ????????Response.Write("<br?/>");  ????????Response.Write(m.Get()[0].Message?+?"?"?+?m.Get()[0].PublishTime.ToString());  ????????Response.Write("<br?/>"); 
 ????????m?=?new?Message(new?SqlMessage());  ????????Response.Write(m.Insert(new?MessageModel("插入",?DateTime.Now)));  ????????Response.Write("<br?/>");  ????????Response.Write(m.Get()[0].Message?+?"?"?+?m.Get()[0].PublishTime.ToString());  ????????Response.Write("<br?/>");  ????}  }

运行结果 True XML方式获取Message 2007-2-10 22:42:44 True SQL方式获取Message 2007-2-10 22:42:44 OK [源码下载]
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|