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 [源码下载]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。