外观模式

什么是外观模式?

引入了一个接口,通过这个接口,使得客户端和子系统的交互更加方便简单。


理解:

我们大家都有过自己做饭和直接去饭店吃饭的经历,自己做饭的话,不仅要准备做菜的原料,还要准备做菜的厨具,还要自己去菜市场把菜买回家,如图一所示,而我们直接去饭店吃饭呢,直接点自己爱吃的菜就可以,正因为有了厨师,我么无需直接和做菜所需的原料,厨具,还有菜直接交互,这里所有的过程直接有厨师完成,我们直接跟厨师交互就可以了,这样就会让整个过程变得非常简单,如图二。

图一:


图二:




在软件开发的过程中,为完成一个复杂的功能,一个客户类需要和多个类交互来完成这一功能,使得客户端的处理信息的量剧增,不好维护,就像客户买股票一样,在客户端客户需要和多只股票类产生交互,这样使得处理特别麻烦,耦合性很高,我们这时就需要引入一个外观类,他为多个业务类的调用提供了统一的入口,通过这个类,让客户直接和这一个类交互就可以了,然后让这个类去实现和多个业务类之间的交互,就像吃饭的时候我直接找厨师就可以了,不需要自己去和多种食材,厨具交互,降低耦合,为什么这样说呢?就像做饭一样,当我买来的菜变了,我所使用的材料就可能不一样,所用的厨具也要发生相应的变化,这就是耦合,一个类的变化会影响到其他的类,为了简单,降低耦合,我直接找个厨师就OK!


外观模式实现

结构类图:




一般实现代码,以买股票为例:

定义一个外观类,即基金类,需要了解各个股票的方法或属性。

 //基金类
    class Fund
    {
        Stock1 gu1;
        Stock2 gu2;
        //Stock3 gu3;

        public Fund()
        {
            gu1 = new Stock1();
            gu2 = new Stock2();
        }

        public void BuyFund()
        {
            gu1.Buy();
            gu2.Buy();

        }


客户端,直接让客户和基金发生交互就可以,根本不需要知道股票类的存在,以及股票的方法和属性。

  Fund jijin = new Fund();
            //基金购买
            jijin.BuyFund();
            //基金赎回
            jijin.SellFund();

            Console.Read();


什么时候使用?

1.在设计的初级阶段,应该有意识地将不同的两个层分离,在层与层之间建立外观,这样可以为复杂的子系统提供一个简单的接口,降低耦合。

2.在开发阶段,子系统因为不断地重构而变得越来越复杂,通过增加外观,可以提供一个简单的接口,减少他们之间的依赖。

3.在维护一个遗留的大型系统的时候,可能这个系统已经很难维护和扩展了,可以为新系统开发一个外观类,来提供设计粗糙或高度复杂的遗留代码的比较清新简单的接口,让新系统和外观对象交互,Facade与遗留代码交互所有复杂的工作。


总结

外观模式就是为一个系统定义了一个接口,用户通过这一个接口就可以完成各个子系统复杂的功能。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 85
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗琪小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值