zoukankan      html  css  js  c++  java
  • C++外观设计模式模式(三)

    3、外观模式总结

        引入了外观类。解除了客户类与子系统的耦合性。客户类不须要直接操作子系统,而是由外观类负责处理,对client而言是透明的,客户类仅仅须要操作外观类就能够了,符合"迪迷特法则"。假设多个地方须要Facade。也就是说外观能够实现功能的共享,也就是实现复用。相同的调用代码仅仅用在Facade里面写一次就好了。不用在多个调用的地方反复写。假设某个系统模块须要改动。仅仅须要改动这个系统模块就能够了,对client无影响,维护性好。另一个潜在优点。对使用Facade的人员来说,Facade节省了他们的学习成本。他们仅仅须要了解Facade就可以。无需深入到子系统内部,去了解每一个模块的细节,也不用和多个模块交互。从而使得开发简单,学习也easy。

        如今的系统是越做越大。越来越复杂,对软件的要求也越来越高。为了提高系统的可重用性,一般会把一个大的系统分为多个子系统。再把一个子系统分成非常多更小的子系统,一直分下去,分到一个个小的模块。这样一来子系统的重用性就会得到加强。

    但这也带来一个问题。因为模块添加,对象之间的耦合性也随之增强了。外观模式能够解决问题,由外观来对各个子模块子系统进行处理,client仅仅须要操作外观就能够了。

        通常在三层架构中就须要考虑在数据訪问层和业务逻辑层、业务逻辑层和UI层的层与层之间建立外观Facade,这样能够为复杂的子系统提供一个简单的结构。使得耦合大大减少。

    比如:在UI层定义一个外观对象。外观负责相应用层的子系统进行处理,当UI层有请求时,通过UI层的外观托付给应用层的子系统进行处理。相同能够在应用层定义一个外观对象。当应用层请求对数据进行处理的时候。通过应用层的外观托付给数据层中的模块对数据进行处理。

    1.外观模式长处

        外观模式的主要长处例如以下:

        (1) 它对client屏蔽了子系统组件。降低了client所需处理的对象数目。并使得子系统使用起来更加容易。通过引入外观模式,client代码将变得非常easy,与之关联的对象也非常少。符合“迪米特法则”。

        (2) 它实现了子系统与client之间的松耦合关系,这使得子系统的变化不会影响到调用它的client,仅仅须要调整外观类就可以。

        (3) 一个子系统的改动对其它子系统没有不论什么影响,并且子系统内部变化也不会影响到外观对象。

        (4)外观对象负责对子系统进行处理,假设某个子系统进行了改动,可能仅仅须要改动外观对象就能够了,维护性好。

    假设没有使用外观对象,则某个子系统进行了改动,则假设有多个client使用到这个子系统。则这些client都得进行改动,维护性差。

        (5)多个client能够复用外观Facade,复用性好。

        (6)符合多用组合少用继承原则。

    2.外观模式缺点

        外观模式的主要缺点例如以下:

        (1) 不能非常好地限制client直接使用子系统类,假设对client訪问子系统类做太多的限制则降低了可变性和灵活 性。

        (2) 假设设计不当,添加新的子系统可能须要改动外观类的源码,违背了开闭原则。

    3. 外观模式适用场景

        (1) 当要为訪问一系列复杂的子系统提供一个简单入口时能够使用外观模式。

        (2) client程序与多个子系统之间存在非常大的依赖性。

    引入外观类能够将子系统与client解耦。从而提高子系统的独立性和可移植性。

        (3) 在层次化结构中,能够使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系。而通过外观类建立联系,减少层之间的耦合度

    4.外观模式详细应用

        (1)邮件业务系统的开发: 发信人仅仅须要把发送内容,接收地址告诉邮局。邮局系统代为发送处理。

    邮局系统充当外观角色。

        (2)绝大多数系统都有一个首页或者导航页面。同一时候也提供了菜单或者工具栏。在这里,首页和导航页面、菜单和工具栏就是外观角色,通过它们用户能够高速訪问子系统,减少了系统的复杂程度。

        (3)KTV点歌系统的开发: 提供一个外观用来处理显示器模块、音响模块、灯光模块操作。

        (4)文件安全传送模块开发: 存在三个模块,读取文件内容模块,对文件内容进行加密模块和写入文件模块。提供一个外观,对这些模块进行处理。

        (5)在三层架构中,UI层和业务逻辑层提供一个外观。业务逻辑层和数据訪问层提供一个外观。这样能够为复杂的子系统提供一个简单的结构。

        (6)车票订购系统的开发: 顾客仅仅须要到售票窗体,购买所须要的火车票。汽车票、飞机票。

    由售票窗体统一处理。

        (7)医疗系统的开发: 眼下须要挂号、缴费、取药等流程。能够定义一个外观,让外观处理这些流程。

        (8)Windows开机启动程序: 应用程序能够双击开启,也能够由Winodws代为处理,windows开机自己主动执行应用程序。这个时候,Windows系统就是一个外观。

        (9)游戏充值系统的开发: 须要推断账号是否存在模块,推断库存是否充足模块,充值模块。

    提供一个外观负责和这三个模块打交道。

        (10)生活中的外观: 找电脑组装公司组装电脑; 通过中介来处理房屋的买卖。开学须要办理各种手续流程。能够找人代为处理;公司须要开发某款产品。市场部门负责市场调研、採购部门负责採购配件,开发科负责开发,此时,通过代表各个部门的处理活动导演。


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    希望走过的路成为未来的基石
    第三次个人作业--用例图设计
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次个人编程作业(更新至2020.02.07)
    Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro权限
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    spring cloud springboot 框架源码 activiti工作流 前后分离 集成代码生成器
    java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4809592.html
Copyright © 2011-2022 走看看