zoukankan      html  css  js  c++  java
  • 外观模式

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

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

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

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

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

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

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

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

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

    外观模式的本质:

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

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

          何时选用外观模式:

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

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

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

  • 相关阅读:
    关于扩展欧几里得算法___基础,基础中的基础
    bzoj 2152聪聪可可
    poj1741 树上的点分治
    POJ1201 区间
    codevs 2756树上的路径
    zoj1260 king
    栈与队列应用:迷宫问题(DFS非最短路径)
    估值为一亿的AI核心代码
    栈与队列应用:计算前缀表达式的值
    栈与队列:循环队列算法+可执行代码
  • 原文地址:https://www.cnblogs.com/hanmeimei/p/4569677.html
Copyright © 2011-2022 走看看