[索引页] [源码下载]

乐在其中设计模式(C#) – 状态模式(State Pattern)

作者:webabcd

介绍
许一个靶在其中间状态改变时转它们的行。对象看起如修改了它所属之类似。

示例
发一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库被要么Xml文件里。在对象中可以依据用户的例外取舍不同之多少持久化方案。
XML 1

MessageModel

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

AbstractMessageState

XML 68using System;
XML 69using System.Collections.Generic;
XML 70using System.Text;
XML 71
XML 72namespace Pattern.State
XML 73XML 74XML 75{
XML 76XML 77    /**//// <summary>
XML 78    /// 状态模式抽象类
XML 79    /// </summary>
XML 80    public abstract class AbstractMessageState
XML 81XML 82    XML 83{
XML 84XML 85        /**//// <summary>
XML 86        /// Context类型
XML 87        /// </summary>
XML 88        protected Message _message;
XML 89
XML 90XML 91        /**//// <summary>
XML 92        /// Context类型属性
XML 93        /// </summary>
XML 94        public Message Message
XML 95XML 96        XML 97{
XML 98XML 99            get XML 100{ return _message; }
XML 101XML 102            set XML 103{ _message = value; }
XML 104        }
XML 105
XML 106XML 107        /**//// <summary>
XML 108        /// 改变状态
XML 109        /// </summary>
XML 110        public abstract void StateChangeCheck();
XML 111
XML 112XML 113        /**//// <summary>
XML 114        /// 获取Message
XML 115        /// </summary>
XML 116        /// <returns></returns>
XML 117        public abstract List<MessageModel> Get();
XML 118
XML 119XML 120        /**//// <summary>
XML 121        /// 插入Message
XML 122        /// </summary>
XML 123        /// <param name=”mm”>Message实体对象</param>
XML 124        /// <returns></returns>
XML 125        public abstract bool Insert(MessageModel mm);
XML 126    }
XML 127}
XML 128

XmlMessage

XML 129using System;
XML 130using System.Collections.Generic;
XML 131using System.Text;
XML 132
XML 133namespace Pattern.State
XML 134XML 135XML 136{
XML 137XML 138    /**//// <summary>
XML 139    /// Xml方式操作Message
XML 140    /// </summary>
XML 141    public class XmlMessage : AbstractMessageState
XML 142XML 143    XML 144{
XML 145XML 146        /**//// <summary>
XML 147        /// 构造函数
XML 148        /// </summary>
XML 149        /// <param name=”message”>Context类型参数</param>
XML 150        public XmlMessage(Message message)
XML 151XML 152        XML 153{
XML 154            this._message = message;
XML 155        }
XML 156
XML 157XML 158        /**//// <summary>
XML 159        /// 改变状态
XML 160        /// </summary>
XML 161        public override void StateChangeCheck()
XML 162XML 163        XML 164{
XML 165            // 如果UserId是admin则变状态也SqlMessage
XML 166            if (this._message.UserId == “admin”)
XML 167XML 168            XML 169{
XML 170                this._message.AbstractMessageState = new SqlMessage(this._message);
XML 171            }
XML 172        }
XML 173
XML 174XML 175        /**//// <summary>
XML 176        /// 获取Message
XML 177        /// </summary>
XML 178        /// <returns></returns>
XML 179        public override List<MessageModel> Get()
XML 180XML 181        XML 182{
XML 183            List<MessageModel> l = new List<MessageModel>();
XML 184            l.Add(new MessageModel(“XML方式获取Message”, DateTime.Now));
XML 185
XML 186            return l;
XML 187        }
XML 188
XML 189XML 190        /**//// <summary>
XML 191        /// 插入Message
XML 192        /// </summary>
XML 193        /// <param name=”mm”>Message实体对象</param>
XML 194        /// <returns></returns>
XML 195        public override bool Insert(MessageModel mm)
XML 196XML 197        XML 198{
XML 199            // 代码略
XML 200            return true;
XML 201        }
XML 202    }
XML 203}
XML 204

SqlMessage

XML 205using System;
XML 206using System.Collections.Generic;
XML 207using System.Text;
XML 208
XML 209namespace Pattern.State
XML 210XML 211XML 212{
XML 213XML 214    /**//// <summary>
XML 215    /// Sql方式操作Message
XML 216    /// </summary>
XML 217    public class SqlMessage : AbstractMessageState
XML 218XML 219    XML 220{
XML 221XML 222        /**//// <summary>
XML 223        /// 构造函数
XML 224        /// </summary>
XML 225        /// <param name=”message”>Context类型参数</param>
XML 226        public SqlMessage(Message message)
XML 227XML 228        XML 229{
XML 230            this._message = message;
XML 231        }
XML 232
XML 233XML 234        /**//// <summary>
XML 235        /// 改变状态
XML 236        /// </summary>
XML 237        public override void StateChangeCheck()
XML 238XML 239        XML 240{
XML 241
XML 242        }
XML 243
XML 244XML 245        /**//// <summary>
XML 246        /// 获取Message
XML 247        /// </summary>
XML 248        /// <returns></returns>
XML 249        public override List<MessageModel> Get()
XML 250XML 251        XML 252{
XML 253            List<MessageModel> l = new List<MessageModel>();
XML 254            l.Add(new MessageModel(“SQL方式获得Message”, DateTime.Now));
XML 255
XML 256            return l;
XML 257        }
XML 258
XML 259XML 260        /**//// <summary>
XML 261        /// 插入Message
XML 262        /// </summary>
XML 263        /// <param name=”mm”>Message实体对象</param>
XML 264        /// <returns></returns>
XML 265        public override bool Insert(MessageModel mm)
XML 266XML 267        XML 268{
XML 269            // 代码略
XML 270            return true;
XML 271        }
XML 272    }
XML 273}
XML 274

Message

XML 275using System;
XML 276using System.Collections.Generic;
XML 277using System.Text;
XML 278
XML 279namespace Pattern.State
XML 280XML 281XML 282{
XML 283XML 284    /**//// <summary>
XML 285    /// Context类
XML 286    /// </summary>
XML 287    public class Message
XML 288XML 289    XML 290{
XML 291XML 292        /**//// <summary>
XML 293        /// 类型为状态模式抽象类的村办变量
XML 294        /// </summary>
XML 295        private AbstractMessageState _abstractMessageState;
XML 296
XML 297XML 298        /**//// <summary>
XML 299        /// 类型为状态模式抽象类的特性
XML 300        /// </summary>
XML 301        public AbstractMessageState AbstractMessageState
XML 302XML 303        XML 304{
XML 305XML 306            get XML 307{ return _abstractMessageState; }
XML 308XML 309            set XML 310{ _abstractMessageState = value; }
XML 311        }       
XML 312
XML 313XML 314        /**//// <summary>
XML 315        /// UserId私有变量
XML 316        /// </summary>
XML 317        private string _userId;
XML 318
XML 319XML 320        /**//// <summary>
XML 321        /// UserId
XML 322        /// </summary>
XML 323        public string UserId
XML 324XML 325        XML 326{
XML 327XML 328            get XML 329{ return _userId; }
XML 330XML 331            set XML 332{ _userId = value; }
XML 333        }
XML 334
XML 335XML 336        /**//// <summary>
XML 337        /// 构造函数
XML 338        /// </summary>
XML 339        /// <param name=”userId”>UserId</param>
XML 340        public Message(string userId)
XML 341XML 342        XML 343{
XML 344            this._userId = userId;
XML 345
XML 346            _abstractMessageState = new XmlMessage(this);
XML 347        }
XML 348
XML 349XML 350        /**//// <summary>
XML 351        /// 获取Message
XML 352        /// </summary>
XML 353        /// <returns></returns>
XML 354        public List<MessageModel> Get()
XML 355XML 356        XML 357{
XML 358            // 修改状态
XML 359            _abstractMessageState.StateChangeCheck();
XML 360
XML 361            return _abstractMessageState.Get();
XML 362        }
XML 363
XML 364XML 365        /**//// <summary>
XML 366        /// 插入Message
XML 367        /// </summary>
XML 368        /// <param name=”mm”>Message实体对象</param>
XML 369        /// <returns></returns>
XML 370        public bool Insert(MessageModel mm)
XML 371XML 372        XML 373{
XML 374            // 修改状态
XML 375            _abstractMessageState.StateChangeCheck();
XML 376
XML 377            return _abstractMessageState.Insert(mm);
XML 378        }
XML 379    }
XML 380}
XML 381

client

XML 382using System;
XML 383using System.Data;
XML 384using System.Configuration;
XML 385using System.Collections;
XML 386using System.Web;
XML 387using System.Web.Security;
XML 388using System.Web.UI;
XML 389using System.Web.UI.WebControls;
XML 390using System.Web.UI.WebControls.WebParts;
XML 391using System.Web.UI.HtmlControls;
XML 392
XML 393using Pattern.State;
XML 394
XML 395public partial class State : System.Web.UI.Page
XML 396XML 397XML 398{
XML 399    protected void Page_Load(object sender, EventArgs e)
XML 400XML 401    XML 402{
XML 403        Message m = new Message(“admin”);
XML 404        Response.Write(m.Insert(new MessageModel(“插入”, DateTime.Now)));
XML 405        Response.Write(“<br />”);
XML 406        Response.Write(m.Get()[0].Message + ” ” + m.Get()[0].PublishTime.ToString());
XML 407        Response.Write(“<br />”);
XML 408
XML 409        m = new Message(“user”);
XML 410        Response.Write(m.Insert(new MessageModel(“插入”, DateTime.Now)));
XML 411        Response.Write(“<br />”);
XML 412        Response.Write(m.Get()[0].Message + ” ” + m.Get()[0].PublishTime.ToString());
XML 413        Response.Write(“<br />”);
XML 414    }
XML 415}
XML 416

运作结果
True
SQL方式赢得Message 2007-3-6 22:58:17
True
XML方式取Message 2007-3-6 22:58:17

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

OK
[源码下载]

相关文章

网站地图xml地图