设计模式 - Strategy Pattern(策略模式)

策略模式应用实例
本文介绍策略模式的概念并提供了一个实际的应用案例。通过Message实体类的操作演示了如何在不同存储方式间切换,包括使用SqlMessage和XmlMessage实现的插入和获取方法。

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 [源码下载]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值