设计模式----门面模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18192161/article/details/84593094

门面模式,也叫做外观模式,是一种比较常用的封装模式。它要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。也就是门面模式提供一个高层次的接口,使得子系统更易于使用。
《设计模式之禅》提供了一个比较容易理解的例子:
投递信件,我们写信一般都需要包含以下操作:
1.准备道具(信纸,信封,笔,邮票等)
2.写信
3.封装信封,贴邮票
4.投递到邮箱

人都是比价赖的,上面的操作太复杂,手里没有这些东西就要去买,也就是需要出门,还得跑路,买回来还得写,写完了还得出门去邮箱,太麻烦了。能不简单一点呢?
正好邮局也知道这一点,所以上线一套的新的服务,当然不会免费的了。他把以上的操作简化为:
1.你告诉我信的内容和地址,其他的我来
那我们通过这一步就能将内容送出去了,不用准备任何东西,甚至都不用出门,打个电话就OK了(有电话还写什么信啊)

那邮局新推出的这一业务,便是一种门面模式!!
邮局早已经准备好了一堆的信纸、邮票和信封,又顾用了一堆写手,有招了一个封信和贴邮票的,最后直接把信送走就行了。如果上面每一步都是一个部门的话,用户是完全不用接触这部门,就可以把信送出了。
门面模式,便是提供这样的一种服务,用户只需要调用门面类中提供的方法即可,不用考虑门面内部各个模块的运作。

门面模式的类图:
在这里插入图片描述

Facde 门面角色:
客户端可以调用这个角色的方法,此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统,也就说该角色没有实际的业务逻辑,只是一个委托类。

Sub System 子系统角色
可以同时拥有一个或者多个子系统,子系统并不知道门面的存在,对于子系统来说,门面类也是另外一个客户端而已

使用门面系统实现上面所说的过程:

/// <summary>
/// 我是写信的人
/// </summary>
public class Client
{
    static void Main()
    {
        Facade facade = new Facade();
        //我是用户,我告诉facade ,你要送这个信息给这个人
        facade.SendMessage("你还好吗?","北方的风");
    }
}

/// <summary>
/// 我是邮局(门面)
/// </summary>
public class Facade  {

    SendMessage send;
    public Facade()
    {
        send = new global::SendMessage();
    }

    public void SendMessage(string _content, string _address)
    {
        send.ReadyProp(); //准备道具
        send.WriteMessage(); //写入信息
        send.PackageMessage(); //封装信封
        send.SendBox(); //投递邮箱
    }
}

/// <summary>
/// 送信的系统(子系统)
/// </summary>
public class SendMessage
{
    public void ReadyProp() { }
    public void WriteMessage(string _content,string _address) { }
    public void PackageMessage() { }
    public void SendBox() { }
}

怎么看都只是增加了一层封装,是客户端更容易使用而已!

门面模式的优势:
1.减少系统的互相依赖(邮局内部的事怎么能让外人来插手呢)
2.提高了灵活性(不管邮局内部部门怎么变动,对于客户来说都没有什么影响)
3.提高安全性(邮局提供了这个业务你才能用,否则你怎用?)

门面模式的使用场景:
1.为一个复杂的模块或子系统提供一个外界访问的接口
2.子系统相对独立
3.预防低水平人员带来的风险扩散

注意:

扫描二维码关注公众号,回复: 4676357 查看本文章
  • 一个子系统可以有多个门面(就像一个家快递公司有N个门面,我负责这一块,你负责那一块一样)
  • 门面不参与子系统内的业务逻辑,门面对象只是提供了一个访问子系统的一个路径而已

猜你喜欢

转载自blog.csdn.net/qq_18192161/article/details/84593094