《放着我来-外观模式》

概述

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

类图

这里写图片描述
[一张图胜过千言万语,可清晰地展现外观模式的结构,以及具体的关系]

优点

1.实现了子系统与客户端之间的松耦合关系。
2.客户端屏蔽了子系统组件,减少了客户端需要处理的对象数目,使得子系统的使用变得容易。

缺点

1.不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统做太多的限制,则减少了可变性和灵活性。
2.如若设计不当,可能会因增加一个子系统类,而对外观类进行修改,违背开闭原则。

何时上场

1.在设计初期阶段,有意识的将不同的两个层分离,在层与层之间建立,提供一个简单的接口,降低耦合度。
2.在开发阶段,子系统需要不断重构演化,增加外观,较少它们之间的依赖。
3.在维护一个遗留的大型系统时,为保留其重要功能,为新系统增加外观,以便于新系统与Façade对象进行交互,Façade与遗留代码进行交互。

独特魅力

完美体现依赖倒转原则和迪米特法则。
可曾还记得依赖倒转原则?——会修电脑不会修收音机
A.高层模块不应该依赖低层模块。两个都应该依赖抽象。
B.抽象不应该依赖细节。细节应该依赖抽象。
可曾熟悉迪米特法则?——无熟人难办事
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个雷需要调用另一个类的某一个方法的话,可以通过第三者转达这个调用。

照葫芦画瓢

//四个子系统的类,此处仅仅列举一个子类,其余代码类似,小编不再一一列举
//理论
class SubSystemOne
{
    public void MethodOne()
    {
       Console.WriteLine("子系统方法一");
    }
}

//实践
class Stock1
{   
    //卖股票
    public void Sell()
    {
       Console.WriteLine("股票一卖出")
    }
    public void Buy()
    {
        Console.WriteLine("股票一买出")   
    }
 }
//外观类 (它需要了解所有的子系统的方法或属性,进行组合,以备外界调用)
class Facade
{
    SubSystemOne one;
    public Facade()
    {
       one = new SubSystemOne();
    }
    Pulic void MethodA()
    {
       Console.WriteLine("\n方法组A()-----");
       one.MethodOne();
    }
}
//客户端调用
static void Main(string[] args)
{
    Facade facade = new Facade();
    facade.MethodA();
    Console.Read();
}

一言堂

大话设计模式中运用股民炒股将抽象的外观模式转化为具体的阐释,在未使用外观模式之前,股民炒股需要自己时刻关注股票市场信息;在借助外观模式之后,股民只需要向基金公司投资基金,参与股票的具体买卖由基金公司承担。

这样的例子在生活中不乏少见,还记得古时养蚕制衣吗?
细心呵护蚕宝宝,终获取柔软的蚕丝,然后根据自己心中所想,一针一线做成自己梦寐以求的衣服。只有自己想得到,才能做得到。
如今的世界,服装公司早已应运而生。
你只需要告诉服装公司你的需求,他们便可制作出你想要的衣服,不必再费心费力去亲力亲为。只有你想不到,没有你得不到。

外观模式就是与人方便,虽说坐享其成并不是一件好事情,然而也得具体情况具体分析,运用外观模式在软件开发中不劳而获也未尝不可。

总览全局

这里写图片描述

PS:个人认为外观模式与装饰模式有很大的相似之处,然而具体的区别还尚未明白,仍需上下求索。愿小伙伴们多多献言。

It's a new day every day.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值