乐在在那之中设计形式(C#) – 建造者形式(Builder Pattern)

[索引页] [源码下载]

乐在当中设计情势(C#) – 建造者方式(Builder Pattern)

作者:webabcd

介绍
将一个扑朔迷离对象的营造与它的象征分离,使得同一的创设进度能够创立分化的代表。

示例
用同一的营造进度创制Sql和Xml的Insert()方法和Get()方法。
图片 1

MessageModel

图片 2using System;
图片 3using System.Collections.Generic;
图片 4using System.Text;
图片 5
图片 6namespace Pattern.Builder
图片 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

SqlMessage

图片 68using System;
图片 69using System.Collections.Generic;
图片 70using System.Text;
图片 71
图片 72namespace Pattern.Builder
图片 73图片 74图片 75{
图片 76图片 77    /**//// <summary>
图片 78    /// Sql格局操作Message
图片 79    /// </summary>
图片 80    public class SqlMessage
图片 81图片 82    图片 83{
图片 84图片 85        /**//// <summary>
图片 86        /// 获取Message
图片 87        /// </summary>
图片 88        /// <returns></returns>
图片 89        public List<MessageModel> Get()
图片 90图片 91        图片 92{
图片 93            List<MessageModel> l = new List<MessageModel>();
图片 94            l.Add(new MessageModel(“SQL方式得到Message”, DateTime.Now));
图片 95
图片 96            return l;
图片 97        }
图片 98
图片 99图片 100        /**//// <summary>
图片 101        /// 插入Message
图片 102        /// </summary>
图片 103        /// <param name=”mm”>Message实体对象</param>
图片 104        /// <returns></returns>
图片 105        public bool Insert(MessageModel mm)
图片 106图片 107        图片 108{
图片 109            // 代码略
图片 110            return true;
图片 111        }
图片 112    }
图片 113}
图片 114

XmlMessage

图片 115using System;
图片 116using System.Collections.Generic;
图片 117using System.Text;
图片 118
图片 119namespace Pattern.Builder
图片 120图片 121图片 122{
图片 123图片 124    /**//// <summary>
图片 125    /// Xml方式操作Message
图片 126    /// </summary>
图片 127    public class XmlMessage
图片 128图片 129    图片 130{
图片 131图片 132        /**//// <summary>
图片 133        /// 获取Message
图片 134        /// </summary>
图片 135        /// <returns></returns>
图片 136        public List<MessageModel> Get()
图片 137图片 138        图片 139{
图片 140            List<MessageModel> l = new List<MessageModel>();
图片 141            l.Add(new MessageModel(“XML方式得到Message”, DateTime.Now));
图片 142
图片 143            return l;
图片 144        }
图片 145
图片 146图片 147        /**//// <summary>
图片 148        /// 插入Message
图片 149        /// </summary>
图片 150        /// <param name=”mm”>Message实体对象</param>
图片 151        /// <returns></returns>
图片 152        public bool Insert(MessageModel mm)
图片 153图片 154        图片 155{
图片 156            // 代码略
图片 157            return true;
图片 158        }
图片 159    }
图片 160}
图片 161

Operation

图片 162using System;
图片 163using System.Collections.Generic;
图片 164using System.Text;
图片 165
图片 166using System.Reflection;
图片 167
图片 168namespace Pattern.Builder
图片 169图片 170图片 171{
图片 172图片 173    /**//// <summary>
图片 174    /// 操作(Product)
图片 175    /// </summary>
图片 176    public class Operation
图片 177图片 178    图片 179{
图片 180        private string _type;
图片 181        private Dictionary<string, string> _dictionary;
图片 182
图片 183图片 184        /**//// <summary>
图片 185        /// 构造函数
图片 186        /// </summary>
图片 187        /// <param name=”type”>产品品种</param>
图片 188        public Operation(string type)
图片 189图片 190        图片 191{
图片 192            _dictionary = new Dictionary<string, string>();
图片 193            this._type = type;
图片 194        }
图片 195
图片 196图片 197        /**//// <summary>
图片 198        /// 索引器
图片 199        /// </summary>
图片 200        /// <param name=”key”></param>
图片 201        /// <returns></returns>
图片 202        public string this[string key]
图片 203图片 204        图片 205{
图片 206图片 207            get 图片 208{ return _dictionary[key]; }
图片 209图片 210            set 图片 211{ _dictionary[key] = value; }
图片 212        }
图片 213
图片 214图片 215        /**//// <summary>
图片 216        /// 获得结果
图片 217        /// </summary>
图片 218        /// <returns></returns>
图片 219        public string GetResult()
图片 220图片 221        图片 222{
图片 223            Assembly assembly = Assembly.Load(“Pattern.Builder”);
图片 224
图片 225            MethodInfo methodGet = assembly.GetType(“Pattern.Builder.” + _dictionary[“get”].Split(‘|’)[0]).GetMethod(_dictionary[“get”].Split(‘|’)[1]);
图片 226            object objGet = methodGet.Invoke(assembly.CreateInstance(“Pattern.Builder.” + _dictionary[“get”].Split(‘|’)[0]), null);
图片 227            List<MessageModel> m = (List<MessageModel>)objGet;
图片 228            
图片 229            MethodInfo methodInsert = assembly.GetType(“Pattern.Builder.” + _dictionary[“insert”].Split(‘|’)[0]).GetMethod(_dictionary[“insert”].Split(‘|’)[1]);
图片 230图片 231            object objInsert = methodInsert.Invoke(assembly.CreateInstance(“Pattern.Builder.” + _dictionary[“insert”].Split(‘|’)[0]), new object[] 图片 232{ new MessageModel(_dictionary[“insert”].Split(‘|’)[2], Convert.ToDateTime(_dictionary[“insert”].Split(‘|’)[3])) });
图片 233            bool b = (bool)objInsert;
图片 234
图片 235            return “类型为” + this._type + “的实施结果:<br />” + b.ToString() + “<br />” + m[0].Message + ” ” + m[0].PublishTime.ToString() + “<br />”;
图片 236        }
图片 237    }
图片 238}
图片 239

AbstractMessageBuilder

图片 240using System;
图片 241using System.Collections.Generic;
图片 242using System.Text;
图片 243
图片 244namespace Pattern.Builder
图片 245图片 246图片 247{
图片 248图片 249    /**//// <summary>
图片 250    /// 抽象Message建造者(Builder)
图片 251    /// </summary>
图片 252    public abstract class AbstractMessageBuilder
图片 253图片 254    图片 255{
图片 256图片 257        /**//// <summary>
图片 258        /// 构造函数
图片 259        /// </summary>
图片 260        /// <param name=”type”>产品类别</param>
图片 261        public AbstractMessageBuilder(string type)
图片 262图片 263        图片 264{
图片 265            this._operation = new Operation(type);
图片 266        }
图片 267
图片 268图片 269        /**//// <summary>
图片 270        /// 操作(Product)
图片 271        /// </summary>
图片 272        protected Operation _operation;
图片 273图片 274        /**//// <summary>
图片 275        /// 操作(Product)
图片 276        /// </summary>
图片 277        public Operation Operation
图片 278图片 279        图片 280{
图片 281图片 282            get 图片 283{ return _operation; }
图片 284图片 285            set 图片 286{ _operation = value; }
图片 287        }
图片 288
图片 289图片 290        /**//// <summary>
图片 291        /// 建造插入方法
图片 292        /// </summary>
图片 293        /// <param name=”mm”></param>
图片 294        abstract public void BuilderInsert(MessageModel mm);
图片 295
图片 296图片 297        /**//// <summary>
图片 298        /// 建造获取情势
图片 299        /// </summary>
图片 300        abstract public void BuilderGet();
图片 301    }
图片 302}
图片 303

SqlMessageBuilder

图片 304using System;
图片 305using System.Collections.Generic;
图片 306using System.Text;
图片 307
图片 308namespace Pattern.Builder
图片 309图片 310图片 311{
图片 312图片 313    /**//// <summary>
图片 314    /// SqlMessage建造者(ConcreteBuilder)
图片 315    /// </summary>
图片 316    public class SqlMessageBuilder : AbstractMessageBuilder
图片 317图片 318    图片 319{
图片 320图片 321        /**//// <summary>
图片 322        /// 构造函数
图片 323        /// </summary>
图片 324        public SqlMessageBuilder()
图片 325            : base(“sql”)
图片 326图片 327        图片 328{
图片 329 
图片 330        }
图片 331
图片 332图片 333        /**//// <summary>
图片 334        /// 建造Sql插入方法
图片 335        /// </summary>
图片 336        /// <param name=”mm”>Message实体对象</param>
图片 337        public override void BuilderInsert(MessageModel mm)
图片 338图片 339        图片 340{
图片 341            base._operation[“insert”] = “SqlMessage|Insert|” + mm.Message + “|” + mm.PublishTime.ToString() + “”;
图片 342        }
图片 343
图片 344图片 345        /**//// <summary>
图片 346        /// 建造Sql获取格局
图片 347        /// </summary>
图片 348        public override void BuilderGet()
图片 349图片 350        图片 351{
图片 352            base._operation[“get”] = “SqlMessage|Get”;
图片 353        }
图片 354    }
图片 355}
图片 356

XmlMessageBuilder

图片 357using System;
图片 358using System.Collections.Generic;
图片 359using System.Text;
图片 360
图片 361namespace Pattern.Builder
图片 362图片 363图片 364{
图片 365图片 366    /**//// <summary>
图片 367    /// XmlMessage建造者(ConcreteBuilder)
图片 368    /// </summary>
图片 369    public class XmlMessageBuilder : AbstractMessageBuilder
图片 370图片 371    图片 372{
图片 373图片 374        /**//// <summary>
图片 375        /// 构造函数
图片 376        /// </summary>
图片 377        public XmlMessageBuilder()
图片 378            : base(“xml”)
图片 379图片 380        图片 381{
图片 382 
图片 383        }
图片 384
图片 385图片 386        /**//// <summary>
图片 387        /// 建造Xml插入方法
图片 388        /// </summary>
图片 389        /// <param name=”mm”>Message实体对象</param>
图片 390        public override void BuilderInsert(MessageModel mm)
图片 391图片 392        图片 393{
图片 394            base._operation[“insert”] = “XmlMessage|Insert|”+mm.Message+”|”+mm.PublishTime.ToString()+””;
图片 395        }
图片 396
图片 397图片 398        /**//// <summary>
图片 399        /// 建造Xml获取格局
图片 400        /// </summary>
图片 401        public override void BuilderGet()
图片 402图片 403        图片 404{
图片 405            base._operation[“get”] = “XmlMessage|Get”;
图片 406        }
图片 407    }
图片 408}
图片 409

Message

图片 410using System;
图片 411using System.Collections.Generic;
图片 412using System.Text;
图片 413
图片 414namespace Pattern.Builder
图片 415图片 416图片 417{
图片 418图片 419    /**//// <summary>
图片 420    /// 指导者(Director)
图片 421    /// </summary>
图片 422    public class Message
图片 423图片 424    图片 425{
图片 426图片 427        /**//// <summary>
图片 428        /// 调用具体建造者剧中人物以创造产品对象
图片 429        /// </summary>
图片 430        /// <param name=”messageBuilder”>AbstractMessageBuilder</param>
图片 431        /// <param name=”mm”>Message实体对象</param>
图片 432        public void Construct(AbstractMessageBuilder messageBuilder, MessageModel mm)
图片 433图片 434        图片 435{
图片 436            messageBuilder.BuilderInsert(mm);
图片 437            messageBuilder.BuilderGet();
图片 438        }
图片 439    }
图片 440}
图片 441

client

图片 442using System;
图片 443using System.Data;
图片 444using System.Configuration;
图片 445using System.Collections;
图片 446using System.Web;
图片 447using System.Web.Security;
图片 448using System.Web.UI;
图片 449using System.Web.UI.WebControls;
图片 450using System.Web.UI.WebControls.WebParts;
图片 451using System.Web.UI.HtmlControls;
图片 452
图片 453using Pattern.Builder;
图片 454
图片 455public partial class Builder : System.Web.UI.Page
图片 456图片 457图片 458{
图片 459    protected void Page_Load(object sender, EventArgs e)
图片 460图片 461    图片 462{
图片 463        Message m = new Message();
图片 464
图片 465        AbstractMessageBuilder amb = new SqlMessageBuilder();
图片 466        m.Construct(amb, new MessageModel(“插入”, DateTime.Now));
图片 467
图片 468        Response.Write(amb.Operation.GetResult());
图片 469
图片 470        amb = new XmlMessageBuilder();
图片 471        m.Construct(amb, new MessageModel(“插入”, DateTime.Now));
图片 472
图片 473        Response.Write(amb.Operation.GetResult());
图片 474    }
图片 475}
图片 476

运作结果
品种为sql的施行结果:
True
SQL形式赢得Message 二〇〇七-5-5 20:53:28
品种为xml的履行结果:
True
XML方式获取Message 二零零六-5-5 20:53:28

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

OK
[源码下载]

相关文章