[索引页] [源码下载]

乐在其中设计模式(C#) – 享元模式(Flyweight Pattern)

作者:webabcd

介绍
应用共享技术可行地支撑大气细粒度的对象。

示例
有一个Message实体类,某些对象对她的操作有Insert()和Get()方法,现在一经下共享技术支持这些目标。
图片 1

MessageModel

图片 2using System;
图片 3using System.Collections.Generic;
图片 4using System.Text;
图片 5
图片 6namespace Pattern.Flyweight
图片 7图片 8图片 9{
图片 10图片 11    /**//// <summary>
图片 12    /// Message实体类
图片 13    /// </summary>
图片 14    public class MessageModel
图片 15图片 16    图片 17{
图片 18图片 19        /**//// <summary>
图片 20        /// 构造函数
图片 21        /// </summary>
图片 22        /// <param name=”msg”>Message内容</param>
图片 23        /// <param name=”pt”>Message发布时间</param>
图片 24        public MessageModel(string msg, DateTime pt)
图片 25图片 26        图片 27{
图片 28            this._message = msg;
图片 29            this._publishTime = pt;
图片 30        }
图片 31
图片 32        private string _message;
图片 33图片 34        /**//// <summary>
图片 35        /// Message内容
图片 36        /// </summary>
图片 37        public string Message
图片 38图片 39        图片 40{
图片 41图片 42            get 图片 43{ return _message; }
图片 44图片 45            set 图片 46{ _message = value; }
图片 47        }
图片 48
图片 49        private DateTime _publishTime;
图片 50图片 51        /**//// <summary>
图片 52        /// Message发布时间
图片 53        /// </summary>
图片 54        public DateTime PublishTime
图片 55图片 56        图片 57{
图片 58图片 59            get 图片 60{ return _publishTime; }
图片 61图片 62            set 图片 63{ _publishTime = value; }
图片 64        }
图片 65    }
图片 66}
图片 67

AbstractMessage

图片 68using System;
图片 69using System.Collections.Generic;
图片 70using System.Text;
图片 71
图片 72namespace Pattern.Flyweight
图片 73图片 74图片 75{
图片 76图片 77    /**//// <summary>
图片 78    /// 操作Message抽象类(Flyweight)
图片 79    /// </summary>
图片 80    public abstract class AbstractMessage
图片 81图片 82    图片 83{
图片 84图片 85        /**//// <summary>
图片 86        /// 获取Message
图片 87        /// </summary>
图片 88        /// <returns></returns>
图片 89        public abstract List<MessageModel> Get();
图片 90
图片 91图片 92        /**//// <summary>
图片 93        /// 插入Message
图片 94        /// </summary>
图片 95        /// <param name=”mm”>Message实体对象</param>
图片 96        /// <returns></returns>
图片 97        public abstract bool Insert(MessageModel mm);
图片 98    }
图片 99}
图片 100

SqlMessage

图片 101using System;
图片 102using System.Collections.Generic;
图片 103using System.Text;
图片 104
图片 105namespace Pattern.Flyweight
图片 106图片 107图片 108{
图片 109图片 110    /**//// <summary>
图片 111    /// Sql方式操作Message(ConcreteFlyweight)
图片 112    /// </summary>
图片 113    public class SqlMessage : AbstractMessage
图片 114图片 115    图片 116{
图片 117图片 118        /**//// <summary>
图片 119        /// 获取Message
图片 120        /// </summary>
图片 121        /// <returns></returns>
图片 122        public override List<MessageModel> Get()
图片 123图片 124        图片 125{
图片 126            List<MessageModel> l = new List<MessageModel>();
图片 127            l.Add(new MessageModel(“SQL方式赢得Message”, DateTime.Now));
图片 128
图片 129            return l;
图片 130        }
图片 131
图片 132图片 133        /**//// <summary>
图片 134        /// 插入Message
图片 135        /// </summary>
图片 136        /// <param name=”mm”>Message实体对象</param>
图片 137        /// <returns></returns>
图片 138        public override bool Insert(MessageModel mm)
图片 139图片 140        图片 141{
图片 142            // 代码略
图片 143            return true;
图片 144        }
图片 145    }
图片 146}
图片 147

XmlMessage

图片 148using System;
图片 149using System.Collections.Generic;
图片 150using System.Text;
图片 151
图片 152namespace Pattern.Flyweight
图片 153图片 154图片 155{
图片 156图片 157    /**//// <summary>
图片 158    /// Xml方式操作Message(ConcreteFlyweight)
图片 159    /// </summary>
图片 160    public class XmlMessage : AbstractMessage
图片 161图片 162    图片 163{
图片 164图片 165        /**//// <summary>
图片 166        /// 获取Message
图片 167        /// </summary>
图片 168        /// <returns></returns>
图片 169        public override List<MessageModel> Get()
图片 170图片 171        图片 172{
图片 173            List<MessageModel> l = new List<MessageModel>();
图片 174            l.Add(new MessageModel(“XML方式获取Message”, DateTime.Now));
图片 175
图片 176            return l;
图片 177        }
图片 178
图片 179图片 180        /**//// <summary>
图片 181        /// 插入Message
图片 182        /// </summary>
图片 183        /// <param name=”mm”>Message实体对象</param>
图片 184        /// <returns></returns>
图片 185        public override bool Insert(MessageModel mm)
图片 186图片 187        图片 188{
图片 189            // 代码略
图片 190            return true;
图片 191        }
图片 192    }
图片 193}
图片 194

MessageFactory

图片 195using System;
图片 196using System.Collections.Generic;
图片 197using System.Text;
图片 198
图片 199namespace Pattern.Flyweight
图片 200图片 201图片 202{
图片 203图片 204    /**//// <summary>
图片 205    /// Message工厂(FlyweightFactory)
图片 206    /// </summary>
图片 207    public class MessageFactory
图片 208图片 209    图片 210{
图片 211        private Dictionary<string, AbstractMessage> _messageObjects = new Dictionary<string, AbstractMessage>();
图片 212
图片 213图片 214        /**//// <summary>
图片 215        /// 获取Message对象
图片 216        /// </summary>
图片 217        /// <param name=”key”>key</param>
图片 218        /// <returns></returns>
图片 219        public AbstractMessage GetMessageObject(string key)
图片 220图片 221        图片 222{
图片 223            AbstractMessage messageObject = null;
图片 224
图片 225            if (_messageObjects.ContainsKey(key))
图片 226图片 227            图片 228{
图片 229                messageObject = _messageObjects[key];
图片 230            }
图片 231            else
图片 232图片 233            图片 234{
图片 235                switch (key)
图片 236图片 237                图片 238{
图片 239                    case “xml”: messageObject = new SqlMessage(); break;
图片 240                    case “sql”: messageObject = new XmlMessage(); break;
图片 241                }
图片 242
图片 243                _messageObjects.Add(key, messageObject);
图片 244            }
图片 245
图片 246            return messageObject;
图片 247        }
图片 248    }
图片 249}
图片 250

Test

图片 251using System;
图片 252using System.Data;
图片 253using System.Configuration;
图片 254using System.Collections;
图片 255using System.Web;
图片 256using System.Web.Security;
图片 257using System.Web.UI;
图片 258using System.Web.UI.WebControls;
图片 259using System.Web.UI.WebControls.WebParts;
图片 260using System.Web.UI.HtmlControls;
图片 261
图片 262using Pattern.Flyweight;
图片 263
图片 264public partial class Flyweight : System.Web.UI.Page
图片 265图片 266图片 267{
图片 268    protected void Page_Load(object sender, EventArgs e)
图片 269图片 270    图片 271{
图片 272图片 273        string[] ary = new string[] 图片 274{ “xml”, “sql” };
图片 275
图片 276        MessageFactory messageFactory = new MessageFactory();
图片 277
图片 278        foreach (string key in ary)
图片 279图片 280        图片 281{
图片 282            AbstractMessage messageObject = messageFactory.GetMessageObject(key);
图片 283
图片 284            Response.Write(messageObject.Insert(new MessageModel(“插入”, DateTime.Now)));
图片 285            Response.Write(“<br />”);
图片 286            Response.Write(messageObject.Get()[0].Message + ” ” + messageObject.Get()[0].PublishTime.ToString());
图片 287            Response.Write(“<br />”);
图片 288        }
图片 289    }
图片 290}
图片 291

运行结果
True
SQL方式获得Message 2007-5-17 22:20:38
True
XML方式获取Message 2007-5-17 22:20:38

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

OK
[源码下载]

相关文章

网站地图xml地图