设计模式之外观模式

来源:互联网 发布:微信js上传图片接口 编辑:程序博客网 时间:2024/06/05 04:15

一、定义

           
<span style="font-size:18px;">为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,为这个接口使得这一子系统更加容易使用。</span>

这定义看了让人好蛋疼。还是来举例说明吧。

二、举例说明

        说个离我们的生活比较近的例子就是理财。如果你的钱存放在银行啊,那是最傻的理财方式。每天你的钱获得的利息还不如通货膨胀的点高,也就是100元存银行的话,你的100元每天要贬值几分钱。所以我们要学会理财。我们理财的时候有好多供我们选择的理财渠道或者理财产品,在这呢我就简单的举个例子。
股票,基金,期货,外汇,债券等等好多。
        假如我们自己买的话,要把钱分配一下,每一笔钱分配在不同的理财渠道。我们自己去控制盈亏,风险比较高,当然收益也会比较高。
其中比较稳定点的就是买基金,你够买的这支基金的所有钱呢被一个专业的理财团队在操控,这个团队用基金中的钱再去做各个渠道的投资。
        
        所以你购买的基金就是一个外观模式。如图

所以外观模式就是:

   而非外观模式就是:

有人说不就是把client端就封装了下嘛!确实是封装了下,但是思想一下子就转变了,就更加具有面向对象的,面向接口的编程了。客户端直接与子系统解耦了

三、代码说明

股票:
public abstract class Gupiao {public abstract void Buy(int money);}
期货:
public abstract class Qihuo {public abstract void Buy(int money);}

外汇:
public abstract class Waihui {public abstract void Buy(int money);}
基金:
public abstract class Jjin {public abstract void buy(int money);}

具体的的股票:
public class BABAGupiao extends Gupiao {@Overridepublic void Buy(int money) {System.out.println("入股阿里巴巴"+money+"美元");}}

具体的期货:
public class BaiyinQihuo extends Qihuo {@Overridepublic void Buy(int money) {// TODO Auto-generated method stubSystem.out.println("投资白银期货"+money+"美元");}}
具体的外汇:
public class RiYuanWaihui extends Waihui {@Overridepublic void Buy(int money) {// TODO Auto-generated method stubSystem.out.println("投资了日元外汇"+money+"美元");}}

具体的基金:
public class FuguoJJin extends Jjin {double totalMoney = 1000000000;public void operation(){//买阿里巴巴的吧,最近涨势不错BABAGupiao baba = new BABAGupiao();baba.Buy(50000000);totalMoney -= 50000000;//炒白银期货BaiyinQihuo baiyinQihuo = new BaiyinQihuo();baiyinQihuo.Buy(500000);totalMoney -= 500000;//炒日元外汇RiYuanWaihui riyuanWaihui = new RiYuanWaihui();riyuanWaihui.Buy(5000000);totalMoney -= 5000000;}@Overridepublic void buy(int money){totalMoney+=money;System.out.println("你购买了富国基金"+money+"元");}}

client:
public class Client {FuguoJJin jijin = new FuguoJJin();public void test(){jijin.buy(100000);jijin.operation();}}
类图:



顺序图:

四、总结.

1、外观模式的本质是:封装交互,简化应用。
2、外观模式的优点:
       松散耦合
          外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
    简单易用
          外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行             交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务。
    更好地划分访问的层次
           通过合理的使用Facade,可以帮助我们更好的划分访问的层次。有些方法是对系统外的,有些方法是系统内              部使用的。把需要暴露给外部的功能集中到外观中,这样既能方便客户端使用,也很好地隐藏了内部的细节。

3、外观模式的缺点:
       过多的或者是不太合理的Facade也容易让人迷惑。到底用Facade好呢,还是直接调用模块好呢?


0 0
原创粉丝点击