• 乐在其中设计模式(C#) 策略模式(Strategy Pattern)


    [索引页]
    [源码下载]


    乐在其中设计模式(C#) - 策略模式(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


    参考
    http://www.dofactory.com/Patterns/PatternStrategy.aspx


    OK
    [源码下载] 
  • 相关阅读:
    朴素贝叶斯分类算法原理
    DevExpress控件学习总结
    Nginx + Tomcat 配置负载均衡集群
    DotNet Core全新认识
    为何梯度反方向是函数值下降最快的方向
    理解矩阵
    C#版-Redis缓存服务器在Windows下的使用
    文本情感分类:分词 OR 不分词(3)
    文本情感分类:深度学习模型(2)
    文本情感分类:传统模型(1)
  • 原文地址:https://www.cnblogs.com/webabcd/p/647148.html
Copyright © 2020-2023  润新知