乐在其中设计形式(C#) – 桥接格局(Bridge Pattern)

[索引页] [源码下载]

乐在其中设计方式(C#) – 桥接方式(Bridge Pattern)

作者:webabcd

介绍
将抽象部分与它的兑现部分分离,使它们都足以独自地转变。

示例
有一个Message实体类,对它的操作有Insert()和Get()方法,现在使那些操作的架空部分和完结部分分离。
图片 1

MessageModel

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

Message

图片 68using System;
图片 69using System.Collections.Generic;
图片 70using System.Text;
图片 71
图片 72namespace Pattern.Bridge
图片 73图片 74图片 75{
图片 76图片 77    /**//// <summary>
图片 78    /// 操作Message(Abstraction)
图片 79    /// </summary>
图片 80    public class Message
图片 81图片 82    图片 83{
图片 84        private AbstractMessage _abstractMessage;
图片 85图片 86        /**//// <summary>
图片 87        /// 操作Message(Implementor)
图片 88        /// </summary>
图片 89        public AbstractMessage AbstractMessage
图片 90图片 91        图片 92{
图片 93图片 94            get 图片 95{ return _abstractMessage; }
图片 96图片 97            set 图片 98{ _abstractMessage = value; }
图片 99        }
图片 100
图片 101图片 102        /**//// <summary>
图片 103        /// 获取Message
图片 104        /// </summary>
图片 105        /// <returns></returns>
图片 106        public virtual List<MessageModel> Get()
图片 107图片 108        图片 109{
图片 110            return _abstractMessage.Get();
图片 111        }
图片 112
图片 113图片 114        /**//// <summary>
图片 115        /// 插入Message
图片 116        /// </summary>
图片 117        /// <param name=”mm”>Message实体对象</param>
图片 118        /// <returns></returns>
图片 119        public virtual bool Insert(MessageModel mm)
图片 120图片 121        图片 122{
图片 123            return _abstractMessage.Insert(mm);
图片 124        }
图片 125    }
图片 126}
图片 127

MyMessage

图片 128using System;
图片 129using System.Collections.Generic;
图片 130using System.Text;
图片 131
图片 132namespace Pattern.Bridge
图片 133图片 134图片 135{
图片 136图片 137    /**//// <summary>
图片 138    /// 操作Message(RefinedAbstraction)
图片 139    /// </summary>
图片 140    public class MyMessage : Message
图片 141图片 142    图片 143{
图片 144图片 145        /**//// <summary>
图片 146        /// 获取Message
图片 147        /// </summary>
图片 148        /// <returns></returns>
图片 149        public override List<MessageModel> Get()
图片 150图片 151        图片 152{
图片 153            List<MessageModel> l = base.Get();
图片 154
图片 155            foreach (MessageModel mm in l)
图片 156图片 157            图片 158{
图片 159                mm.Message += “(RefinedAbstraction)”;
图片 160            }
图片 161
图片 162            return l;
图片 163        }
图片 164    }
图片 165}
图片 166

AbstractMessage

图片 167using System;
图片 168using System.Collections.Generic;
图片 169using System.Text;
图片 170
图片 171namespace Pattern.Bridge
图片 172图片 173图片 174{
图片 175图片 176    /**//// <summary>
图片 177    /// 操作Message(Implementor)
图片 178    /// </summary>
图片 179    public abstract class AbstractMessage
图片 180图片 181    图片 182{
图片 183图片 184        /**//// <summary>
图片 185        /// 获取Message
图片 186        /// </summary>
图片 187        /// <returns></returns>
图片 188        public abstract List<MessageModel> Get();
图片 189
图片 190图片 191        /**//// <summary>
图片 192        /// 插入Message
图片 193        /// </summary>
图片 194        /// <param name=”mm”>Message实体对象</param>
图片 195        /// <returns></returns>
图片 196        public abstract bool Insert(MessageModel mm);
图片 197    }
图片 198}
图片 199

SqlMessage

图片 200using System;
图片 201using System.Collections.Generic;
图片 202using System.Text;
图片 203
图片 204namespace Pattern.Bridge
图片 205图片 206图片 207{
图片 208图片 209    /**//// <summary>
图片 210    /// Sql格局操作Message(ConcreteImplementor)
图片 211    /// </summary>
图片 212    public class SqlMessage : AbstractMessage
图片 213图片 214    图片 215{
图片 216图片 217        /**//// <summary>
图片 218        /// 获取Message
图片 219        /// </summary>
图片 220        /// <returns></returns>
图片 221        public override List<MessageModel> Get()
图片 222图片 223        图片 224{
图片 225            List<MessageModel> l = new List<MessageModel>();
图片 226            l.Add(new MessageModel(“SQL情势得到Message”, Date提姆e.Now));
图片 227
图片 228            return l;
图片 229        }
图片 230
图片 231图片 232        /**//// <summary>
图片 233        /// 插入Message
图片 234        /// </summary>
图片 235        /// <param name=”mm”>Message实体对象</param>
图片 236        /// <returns></returns>
图片 237        public override bool Insert(MessageModel mm)
图片 238图片 239        图片 240{
图片 241            // 代码略
图片 242            return true;
图片 243        }
图片 244    }
图片 245}
图片 246

XmlMessage

图片 247using System;
图片 248using System.Collections.Generic;
图片 249using System.Text;
图片 250
图片 251namespace Pattern.Bridge
图片 252图片 253图片 254{
图片 255图片 256    /**//// <summary>
图片 257    /// Xml格局操作Message(ConcreteImplementor)
图片 258    /// </summary>
图片 259    public class XmlMessage : AbstractMessage
图片 260图片 261    图片 262{
图片 263图片 264        /**//// <summary>
图片 265        /// 获取Message
图片 266        /// </summary>
图片 267        /// <returns></returns>
图片 268        public override List<MessageModel> Get()
图片 269图片 270        图片 271{
图片 272            List<MessageModel> l = new List<MessageModel>();
图片 273            l.Add(new MessageModel(“XML情势取得Message”, Date提姆e.Now));
图片 274
图片 275            return l;
图片 276        }
图片 277
图片 278图片 279        /**//// <summary>
图片 280        /// 插入Message
图片 281        /// </summary>
图片 282        /// <param name=”mm”>Message实体对象</param>
图片 283        /// <returns></returns>
图片 284        public override bool Insert(MessageModel mm)
图片 285图片 286        图片 287{
图片 288            // 代码略
图片 289            return true;
图片 290        }
图片 291    }
图片 292}
图片 293

Test

图片 294using System;
图片 295using System.Data;
图片 296using System.Configuration;
图片 297using System.Collections;
图片 298using System.Web;
图片 299using System.Web.Security;
图片 300using System.Web.UI;
图片 301using System.Web.UI.WebControls;
图片 302using System.Web.UI.WebControls.WebParts;
图片 303using System.Web.UI.HtmlControls;
图片 304
图片 305using Pattern.Bridge;
图片 306
图片 307public partial class Bridge : System.Web.UI.Page
图片 308图片 309图片 310{
图片 311    protected void Page_Load(object sender, EventArgs e)
图片 312图片 313    图片 314{
图片 315        MyMessage m = new MyMessage();
图片 316
图片 317        m.AbstractMessage = new SqlMessage();
图片 318
图片 319        Response.Write(m.Insert(new MessageModel(“插入”, DateTime.Now)));
图片 320        Response.Write(“<br />”);
图片 321        Response.Write(m.Get()[0].Message + ” ” + m.Get()[0].PublishTime.ToString());
图片 322        Response.Write(“<br />”);
图片 323
图片 324        m.AbstractMessage = new XmlMessage();
图片 325
图片 326        Response.Write(m.Insert(new MessageModel(“插入”, DateTime.Now)));
图片 327        Response.Write(“<br />”);
图片 328        Response.Write(m.Get()[0].Message + ” ” + m.Get()[0].PublishTime.ToString());
图片 329    }
图片 330}
图片 331

运行结果
True
SQL格局得到Message(RefinedAbstraction) 2007-5-13 19:11:19
True
XML情势取得Message(RefinedAbstraction) 2007-5-13 19:11:19

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

OK
[源码下载]

相关文章