作者:webabcd

CheckUserWrapper

运行结果
SQL格局获得Message(经过用户验证) 二〇〇六-5-壹三 1玖:34:0一
SQL形式获得Message(经过输入验证) 2005-5-一三 1九:3四:0一
SQL方式获得Message(经过用户验证)(经过输入验证) 2005-5-1三 1玖:3四:0一

AbstractMessage

MessageModel

SqlMessage

AbstractMessageWrapper

图片 1using System;
图片 2using System.Collections.Generic;
图片 3using System.Text;
图片 4
图片 5namespace Pattern.Decorator
图片 6图片 7图片 8{
图片 9图片 10    /**//// <summary>
图片 11    /// Xml方式操作Message(ConcreteComponent)
图片 12    /// </summary>
图片 13    public class XmlMessage : AbstractMessage
图片 14图片 15    图片 16{
图片 17图片 18        /**//// <summary>
图片 19        /// 获取Message
图片 20        /// </summary>
图片 21        /// <returns></returns>
图片 22        public override List<MessageModel> Get()
图片 23图片 24        图片 25{
图片 26            List<MessageModel> l = new List<MessageModel>();
图片 27            l.Add(new MessageModel(“XML情势获得Message”, DateTime.Now));
图片 28
图片 29            return l;
图片 30        }
图片 31
图片 32图片 33        /**//// <summary>
图片 34        /// 插入Message
图片 35        /// </summary>
图片 36        /// <param name=”mm”>Message实体对象</param>
图片 37        /// <returns></returns>
图片 38        public override bool Insert(MessageModel mm)
图片 39图片 40        图片 41{
图片 42            // 代码略
图片 43            return true;
图片 44        }
图片 45    }
图片 46}
图片 47

示例
有二个Message实体类,某些对象对它的操作有Insert()和Get()方法,将来扩充那几个指标的成效。
图片 48

图片 49using System;
图片 50using System.Collections.Generic;
图片 51using System.Text;
图片 52
图片 53namespace Pattern.Decorator
图片 54图片 55图片 56{
图片 57图片 58    /**//// <summary>
图片 59    /// 扩展出用户验证的功力(ConcreteDecorator)
图片 60    /// </summary>
图片 61    public class CheckUserWrapper : AbstractMessageWrapper
图片 62图片 63    图片 64{
图片 65图片 66        /**//// <summary>
图片 67        /// 构造函数
图片 68        /// </summary>
图片 69        /// <param name=”abstractMessage”>AbstractMessage</param>
图片 70        public CheckUserWrapper(AbstractMessage abstractMessage)
图片 71            : base(abstractMessage)
图片 72图片 73        图片 74{
图片 75            
图片 76        }
图片 77
图片 78图片 79        /**//// <summary>
图片 80        /// 获取Message
图片 81        /// </summary>
图片 82        /// <returns></returns>
图片 83        public override List<MessageModel> Get()
图片 84图片 85        图片 86{
图片 87            List<MessageModel> l = base.Get();
图片 88
图片 89            foreach (MessageModel mm in l)
图片 90图片 91            图片 92{
图片 93                mm.Message += “(经过用户验证)”;
图片 94            }
图片 95
图片 96            return l;
图片 97        }
图片 98
图片 99图片 100        /**//// <summary>
图片 101        /// 插入Message
图片 102        /// </summary>
图片 103        /// <param name=”mm”>Message实体对象</param>
图片 104        /// <returns></returns>
图片 105        public override bool Insert(MessageModel mm)
图片 106图片 107        图片 108{
图片 109            // 在此地增添成效
图片 110
图片 111            return base.Insert(mm);
图片 112        }
图片 113
图片 114    }
图片 115}
图片 116

介绍
动态地给三个对象增多壹些格外的天职。就扩充功用来说,它比生成子类情势更灵活。

Test

图片 117using System;
图片 118using System.Collections.Generic;
图片 119using System.Text;
图片 120
图片 121namespace Pattern.Decorator
图片 122图片 123图片 124{
图片 125图片 126    /**//// <summary>
图片 127    /// 装饰AbstractMessage(Decorator)
图片 128    /// </summary>
图片 129    public abstract class AbstractMessageWrapper : AbstractMessage
图片 130图片 131    图片 132{
图片 133        private AbstractMessage _abstractMessage;
图片 134
图片 135图片 136        /**//// <summary>
图片 137        /// 构造函数
图片 138        /// </summary>
图片 139        /// <param name=”abstractMessage”>AbstractMessage</param>
图片 140        public AbstractMessageWrapper(AbstractMessage abstractMessage)
图片 141图片 142        图片 143{
图片 144            this._abstractMessage = abstractMessage;
图片 145        }
图片 146
图片 147图片 148        /**//// <summary>
图片 149        /// 获取Message
图片 150        /// </summary>
图片 151        /// <returns></returns>
图片 152        public override List<MessageModel> Get()
图片 153图片 154        图片 155{
图片 156            return _abstractMessage.Get();
图片 157        }
图片 158
图片 159图片 160        /**//// <summary>
图片 161        /// 插入Message
图片 162        /// </summary>
图片 163        /// <param name=”mm”>Message实体对象</param>
图片 164        /// <returns></returns>
图片 165        public override bool Insert(MessageModel mm)
图片 166图片 167        图片 168{
图片 169            return _abstractMessage.Insert(mm);
图片 170        }
图片 171    }
图片 172}
图片 173

图片 174using System;
图片 175using System.Data;
图片 176using System.Configuration;
图片 177using System.Collections;
图片 178using System.Web;
图片 179using System.Web.Security;
图片 180using System.Web.UI;
图片 181using System.Web.UI.WebControls;
图片 182using System.Web.UI.WebControls.WebParts;
图片 183using System.Web.UI.HtmlControls;
图片 184
图片 185using Pattern.Decorator;
图片 186
图片 187public partial class Decorator : System.Web.UI.Page
图片 188图片 189图片 190{
图片 191    protected void Page_Load(object sender, EventArgs e)
图片 192图片 193    图片 194{
图片 195        AbstractMessage message = new SqlMessage();
图片 196
图片 197        AbstractMessageWrapper amr = new CheckUserWrapper(message);
图片 198
图片 199        Response.Write(amr.Get()[0].Message + ” ” + amr.Get()[0].PublishTime.ToString());
图片 200        Response.Write(“<br />”);
图片 201
图片 202        AbstractMessageWrapper amr2 = new CheckInputWrapper(message);
图片 203
图片 204        Response.Write(amr2.Get()[0].Message + ” ” + amr2.Get()[0].PublishTime.ToString());
图片 205        Response.Write(“<br />”);
图片 206
图片 207        AbstractMessageWrapper amr3 = new CheckUserWrapper(message);
图片 208        AbstractMessageWrapper amr4 = new CheckInputWrapper(amr3);
图片 209
图片 210        Response.Write(amr4.Get()[0].Message + ” ” + amr4.Get()[0].PublishTime.ToString());
图片 211        Response.Write(“<br />”);
图片 212    }
图片 213}
图片 214

乐在在那之中设计形式(C#) – 装饰格局(Decorator Pattern)

[索引页] [源码下载]

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

图片 215using System;
图片 216using System.Collections.Generic;
图片 217using System.Text;
图片 218
图片 219namespace Pattern.Decorator
图片 220图片 221图片 222{
图片 223图片 224    /**//// <summary>
图片 225    /// Message实体类
图片 226    /// </summary>
图片 227    public class MessageModel
图片 228图片 229    图片 230{
图片 231图片 232        /**//// <summary>
图片 233        /// 构造函数
图片 234        /// </summary>
图片 235        /// <param name=”msg”>Message内容</param>
图片 236        /// <param name=”pt”>Message公布时间</param>
图片 237        public MessageModel(string msg, DateTime pt)
图片 238图片 239        图片 240{
图片 241            this._message = msg;
图片 242            this._publishTime = pt;
图片 243        }
图片 244
图片 245        private string _message;
图片 246图片 247        /**//// <summary>
图片 248        /// Message内容
图片 249        /// </summary>
图片 250        public string Message
图片 251图片 252        图片 253{
图片 254图片 255            get 图片 256{ return _message; }
图片 257图片 258            set 图片 259{ _message = value; }
图片 260        }
图片 261
图片 262        private DateTime _publishTime;
图片 263图片 264        /**//// <summary>
图片 265        /// Message发表时间
图片 266        /// </summary>
图片 267        public DateTime PublishTime
图片 268图片 269        图片 270{
图片 271图片 272            get 图片 273{ return _publishTime; }
图片 274图片 275            set 图片 276{ _publishTime = value; }
图片 277        }
图片 278    }
图片 279}
图片 280

CheckInputWrapper

XmlMessage

图片 281using System;
图片 282using System.Collections.Generic;
图片 283using System.Text;
图片 284
图片 285namespace Pattern.Decorator
图片 286图片 287图片 288{
图片 289图片 290    /**//// <summary>
图片 291    /// 扩充出输入验证的效益(ConcreteDecorator)
图片 292    /// </summary>
图片 293    public class CheckInputWrapper : AbstractMessageWrapper
图片 294图片 295    图片 296{
图片 297图片 298        /**//// <summary>
图片 299        /// 构造函数
图片 300        /// </summary>
图片 301        /// <param name=”abstractMessage”>AbstractMessage</param>
图片 302        public CheckInputWrapper(AbstractMessage abstractMessage)
图片 303            : base(abstractMessage)
图片 304图片 305        图片 306{
图片 307            
图片 308        }
图片 309
图片 310图片 311        /**//// <summary>
图片 312        /// 获取Message
图片 313        /// </summary>
图片 314        /// <returns></returns>
图片 315        public override List<MessageModel> Get()
图片 316图片 317        图片 318{
图片 319            List<MessageModel> l = base.Get();
图片 320
图片 321            foreach (MessageModel mm in l)
图片 322图片 323            图片 324{
图片 325                mm.Message += “(经过输入验证)”;
图片 326            }
图片 327
图片 328            return l;
图片 329        }
图片 330
图片 331图片 332        /**//// <summary>
图片 333        /// 插入Message
图片 334        /// </summary>
图片 335        /// <param name=”mm”>Message实体对象</param>
图片 336        /// <returns></returns>
图片 337        public override bool Insert(MessageModel mm)
图片 338图片 339        图片 340{
图片 341            // 在此地扩充成效
图片 342
图片 343            return base.Insert(mm);
图片 344        }
图片 345    }
图片 346}
图片 347

OK
[源码下载]

图片 348using System;
图片 349using System.Collections.Generic;
图片 350using System.Text;
图片 351
图片 352namespace Pattern.Decorator
图片 353图片 354图片 355{
图片 356图片 357    /**//// <summary>
图片 358    /// Sql格局操作Message(ConcreteComponent)
图片 359    /// </summary>
图片 360    public class SqlMessage : AbstractMessage
图片 361图片 362    图片 363{
图片 364图片 365        /**//// <summary>
图片 366        /// 获取Message
图片 367        /// </summary>
图片 368        /// <returns></returns>
图片 369        public override List<MessageModel> Get()
图片 370图片 371        图片 372{
图片 373            List<MessageModel> l = new List<MessageModel>();
图片 374            l.Add(new MessageModel(“SQL格局获取Message”, DateTime.Now));
图片 375
图片 376            return l;
图片 377        }
图片 378
图片 379图片 380        /**//// <summary>
图片 381        /// 插入Message
图片 382        /// </summary>
图片 383        /// <param name=”mm”>Message实体对象</param>
图片 384        /// <returns></returns>
图片 385        public override bool Insert(MessageModel mm)
图片 386图片 387        图片 388{
图片 389            // 代码略
图片 390            return true;
图片 391        }
图片 392    }
图片 393}
图片 394

图片 395using System;
图片 396using System.Collections.Generic;
图片 397using System.Text;
图片 398
图片 399namespace Pattern.Decorator
图片 400图片 401图片 402{
图片 403图片 404    /**//// <summary>
图片 405    /// 操作Message的虚幻构件(Component)
图片 406    /// </summary>
图片 407    public abstract class AbstractMessage
图片 408图片 409    图片 410{
图片 411图片 412        /**//// <summary>
图片 413        /// 获取Message
图片 414        /// </summary>
图片 415        /// <returns></returns>
图片 416        public abstract List<MessageModel> Get();
图片 417
图片 418图片 419        /**//// <summary>
图片 420        /// 插入Message
图片 421        /// </summary>
图片 422        /// <param name=”mm”>Message实体对象</param>
图片 423        /// <returns></returns>
图片 424        public abstract bool Insert(MessageModel mm);
图片 425    }
图片 426}
图片 427

相关文章

网站地图xml地图