外观模式

      相信很多人都有过买股票的经历,一打开股票软件,一千多支股票,红红绿绿,又是指数大盘,又是个股K线指标,一下说基本面如何如何重要,一下说什么有题材才可以赚大钱,让人头昏眼花、迷茫困惑。其实股民,特别是新股民在没有足够了解证券知识的情况下去做股票,是很容易亏钱的。毕竟,需要学习的知识实在太多,不具备这些知识就很难做好,再有就是心态很重要,刚开始接触股票的人一般都盼涨怕跌,于是心态很不稳定,这反而做不好股票。

      而基金就好多了,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有投资者所有,管理机构收取一定比例的托管管理费用。由于基金会买几十支好的股票,不会因为某支股票的大跌而影响收益,尽管每个人的钱不多,但大家放在一起,反而容易达到好的投资效果。

      如果是自己买股票,需要了解股票的各种信息,需要预测它的未来,还要买入和卖出的时机合适,这其实是很难做到的。专业的基金经理人相对专业,所以就不容易像散户那么盲目。

      客户类需要操作所有股票类,及对它们的买、卖方法进行各种组合。股票的结构图如下:

      而对于基金,客户类只要操作基金类就可以了,由基金类来操作所有股票类,及对它们的买、卖方法进行各种组合。基金类就相当于外观模式里的“外观类”,其结构图如下:

      外观模式就是通过引入这么一个外观类,在这个类里面定义客户端想要的简单的方法,然后在这些方法的实现里面,由外观类再去分别调用内部的多个模块来实现功能,从而让客户端变得简单。这样一来,客户端就只需要和外观类交互就可以了。外观模式的结构图如下:

      表面上看就是把客户端代码搬到了Facade里去了,但注意Facade的位置是位于子系统这边,它的目的不是给子系统添加新的接口,而是为了松散耦合,让外部能够更简单地使用子系统,它屏蔽了外部客户端和系统内部模块的交互,封装了系统内部的细节功能。这样一来今后调用模块的算法发生了变化,比如变化成要先调用B,然后调用A,那么只要修改Facade的实现就可以了。

      另外一个好处是,Facade的功能可以被很多个客户端调用,也就是说Facade可以实现功能的共享,也就是实现复用。同样的调用代码就只用在Facade里面写一次就好了,而不用在多个调用的地方重复写。

      虽然有了外观,但如果需要,外部还是可以绕开Facade,而直接调用某个具体模块的接口,这样就能实现兼顾组合功能和细节功能。

外观模式的本质:

      本质是“封装交互,简化调用”。Facade封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用。通过外观,子系统为外部提供了一些高层的接口,以方便它们的使用。

      外观模式很好的体现了“迪米特法则”即“最少知识原则

      何时选用外观模式:

1.在设计初期阶段,应该要有意识将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade。

2.在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,给外部调用它们的用户程序带来了使用上的困难,可以增加外观Facade提供一个简单的接口,减少它们之间的依赖。

3.在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须依赖于它。对于复杂难以维护的老系统,直接去改或去扩展都可能产生很多问题,分俩小组,一个开发Facade与老系统的交互,另一个只要了解Facade的接口,直接开发新系统调用这些接口即可。

posted @ 2015-06-11 17:28  何塞穆里尼奥  阅读(255)  评论(0编辑  收藏  举报