天天看点

乐在其中设计模式(C#) - 外观模式(Facade Pattern)

乐在其中设计模式(C#) - 外观模式(Facade Pattern)

介绍

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

示例

有一个Message实体类,某对象对它的操作有Get()方法,另外还有一个对象有一个Validate()方法来判断用户是否有权限。现在提供一个高层接口来封装这两个方法。

MessageModel

using System; 

using System.Collections.Generic; 

using System.Text; 

namespace Pattern.Facade 

        /// <summary> 

        /// Message实体类 

        /// </summary> 

        public class MessageModel 

        { 

                /// <summary> 

                /// 构造函数 

                /// </summary> 

                /// <param name="msg">Message内容</param> 

                /// <param name="pt">Message发布时间</param> 

                public MessageModel(string msg, DateTime pt) 

                { 

                        this._message = msg; 

                        this._publishTime = pt; 

                } 

                private string _message; 

                /// Message内容 

                public string Message 

                        get { return _message; } 

                        set { _message = value; } 

                private DateTime _publishTime; 

                /// Message发布时间 

                public DateTime PublishTime 

                        get { return _publishTime; } 

                        set { _publishTime = value; } 

        } 

}

User

        /// 用户相关类 

        public class User 

                /// 验证用户是否合法 

                /// <param name="userId">UserId</param> 

                /// <returns></returns> 

                public bool Validate(string userId) 

                        if (userId == "admin") 

                        { 

                                return true; 

                        } 

                        else 

                                return false; 

SqlMessage

        /// Sql方式操作Message 

        public class SqlMessage 

                /// 获取Message 

                public List<MessageModel> Get() 

                        List<MessageModel> l = new List<MessageModel>(); 

                        l.Add(new MessageModel("SQL方式获取Message", DateTime.Now)); 

                        return l; 

Message

        /// Facade类 

        public class Message 

                private string _userId = ""; 

                public Message(string userId) 

                        this._userId = userId; 

                /// 首先使用User类的Validate()方法验证用户是否合法 

                /// 然后使用SqlMessage类的Get()方法获取Message 

                        User u = new User(); 

                        SqlMessage m = new SqlMessage(); 

                        if (u.Validate(_userId)) 

                                return m.Get(); 

                                List<MessageModel> l = new List<MessageModel>(); 

                                l.Add(new MessageModel("无权获取", DateTime.Now)); 

                                return l; 

client

using System.Data; 

using System.Configuration; 

using System.Collections; 

using System.Web; 

using System.Web.Security; 

using System.Web.UI; 

using System.Web.UI.WebControls; 

using System.Web.UI.WebControls.WebParts; 

using System.Web.UI.HtmlControls; 

using Pattern.Facade; 

public partial class Facade : System.Web.UI.Page 

        protected void Page_Load(object sender, EventArgs e) 

                Message m = new Message("user"); 

                Response.Write(m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString()); 

                Response.Write("<br />"); 

                m = new Message("admin"); 

运行结果

无权获取 2007-3-20 22:16:50

SQL方式获取Message 2007-3-20 22:16:50

参考

<a href="http://www.dofactory.com/Patterns/PatternFacade.aspx" target="_blank">http://www.dofactory.com/Patterns/PatternFacade.aspx</a>

OK

<a href="http://down.51cto.com/data/100859" target="_blank">[源码下载]</a>

     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344536,如需转载请自行联系原作者