外观模式(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;
/// <summary>
/// Message内容
/// </summary>
public string Message
{
get { return _message; }
set { _message = value; }
} private DateTime _publishTime;
/// <summary>
/// Message发布时间
/// </summary>
public DateTime PublishTime
{
get { return _publishTime; }
set { _publishTime = value; }
}
}
}

  User

using System;
using System.Collections.Generic;
using System.Text; namespace Pattern.Facade
{
/// <summary>
/// 用户相关类
/// </summary>
public class User
{
/// <summary>
/// 验证用户是否合法
/// </summary>
/// <param name="userId">UserId</param>
/// <returns></returns>
public bool Validate(string userId)
{
if (userId == "admin")
{
return true;
}
else
{
return false;
}
}
}
}

  SqlMessage

using System;
using System.Collections.Generic;
using System.Text; namespace Pattern.Facade
{
/// <summary>
/// Sql方式操作Message
/// </summary>
public class SqlMessage
{
/// <summary>
/// 获取Message
/// </summary>
/// <returns></returns>
public List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("SQL方式获取Message", DateTime.Now)); return l;
}
}
}

  Message

using System;
using System.Collections.Generic;
using System.Text; namespace Pattern.Facade
{
/// <summary>
/// Facade类
/// </summary>
public class Message
{
private string _userId = ""; /// <summary>
/// 构造函数
/// </summary>
/// <param name="userId">UserId</param>
public Message(string userId)
{
this._userId = userId;
} /// <summary>
/// 获取Message
/// 首先使用User类的Validate()方法验证用户是否合法
/// 然后使用SqlMessage类的Get()方法获取Message
/// </summary>
/// <returns></returns>
public List<MessageModel> Get()
{
User u = new User();
SqlMessage m = new SqlMessage(); if (u.Validate(_userId))
{
return m.Get();
}
else
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("无权获取", DateTime.Now)); return l;
}
}
}
}

  Client

using System;
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");
Response.Write(m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString());
Response.Write("<br />");
}
}

  运行结果
  无权获取 2007-3-20 22:16:50
  SQL方式获取Message 2007-3-20 22:16:50

最新文章

  1. scikit-learn一般实例之四:使用管道和GridSearchCV选择降维
  2. 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!
  3. maven 私服搭建
  4. UDP打洞、P2P组网方式研究
  5. 【Hadoop】史上最全 Hadoop 生态 全景图
  6. Sublime Text 下配置python
  7. Linux环境高级编程--介绍
  8. SQL Server两种分页的存储过程介绍
  9. Nginx 变量漫谈(八)
  10. (IOS)Apple 证书相关
  11. angular.js的一点理解
  12. UVA - 437 The Tower of Babylon(dp-最长递增子序列)
  13. 一个普通的 Zepto 源码分析(三) - event 模块
  14. java 操作本地数据库 mysql
  15. go 闭包程序解读
  16. UVA - 12716 - 异或序列
  17. IIS+NGINX 负载web服务器
  18. XrmToolBox 连接
  19. css实现图片垂直居中
  20. Retrofit 2.0 使用和原理

热门文章

  1. Linux----七个有效的文本编辑习惯
  2. LeetCode----Copy List with Random Pointer 深度拷贝,浅度拷贝,Lazy拷贝解析
  3. 【LeetCode OJ】Interleaving String
  4. MVC中Asp.Net管道(二)
  5. web字体
  6. hdu 3635
  7. [转]LUA C 互调
  8. IFrame 获取内容
  9. nginx的启动,停止命令
  10. linxu fcntl 函数用法 【转】