设计模式之外观模式
来源:互联网 发布:微信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
- 设计模式之外观
- 设计模式之外观
- 设计模式 之 外观
- 设计模式之外观
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 设计模式之外观模式
- 从今天开始写博客吧
- 第十周项目二 M$pszi$y是嘛意思(包括拓展题)
- 客户端与服务器端的交互——上传文件
- 算法竞赛入门经典 例题 3-1 开灯问题
- RakNet学习(19) -- NetworkIDObject
- 设计模式之外观模式
- RakNet学习(20) -- Statistics
- Epics下 使用asyn、StreamDevice实现串口/网络设备的驱动开发
- 《云计算架构技术与实践》之云接入的典型应用
- 让我的头像圆起来--Android之圆头像
- SQLite相关知识
- cocos2d-x 事件分发机制 ——触摸事件监听
- 浅谈android4.0开发之GridLayout布局
- 如何使用谷歌浏览器模拟手机设备