前言

分析

1.一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体
2.引入一个新的外观类(Facade)来负责和多个业务类子系统( Subsystem)进行交互,而客户类只需与外观类交互
3.为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互
4.没有外观类:每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大。
5.引入外观类:客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现从而降低了系统的耦合度。

系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交

1.外观模式定义

系统中的一组接口提供一个统一的入口观模式定义了一个高层接口这个使得这一子系统更容易使用
1.又称为门面模式
2.是迪米特法则的一种具体实现
3.通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统的耦合度
4.所指的子系统是一个广义的概念,它可以是一个类,一个功能模块,系统的一个组成部分或者一个完整的系统

2.外观模式的结构与实现


外观模式包含以下2个角色
Facade(外观角色)
Subsystem(子系统角色)

实例说明

某软要开发应用于多个软件的文件加密模块,该模块文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现.这3个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这3个操作的业务代码封装在3个不同的类中.
现使用外观模式设计该文件加密模块

软件设计模式及体系结构之外观模式相关推荐

  1. 软件设计模式及体系结构之迭代器模式

    前言 1.电视机<→存储电视频道的集合<→聚合类 2.电视机遥控器<→操作电视频道<>迭代器 (Iterator) 3.访问一个聚合对象中的元素但又不需要暴露它的内部 分 ...

  2. 软件设计模式与体系结构实验——3.1-1组合模式的应用

    链接: 软件设计模式与体系结构实验--2.1-1(2)(抽象)工厂模式的应用 链接: 软件设计模式与体系结构实验--2.2-1生成器模式的应用 链接: 软件设计模式与体系结构实验--2.3-1单列模式 ...

  3. 软件设计模式与体系结构 课后练习1

    软件设计模式与体系结构 课后练习1 习题如下: 解:第一题 画出该模式的设计类图: 如图1所示: 图1 设计类图 2.  解释为什么自己的设计符合开闭原则? 答:因为设计的类.模块和函数对扩展开放,对 ...

  4. 结构型设计模式(2)—— 外观模式(Facade Pattern)

    文章目录 1.概述 2.外观模式的简单应用 3.应用场景 4.优缺点 5.小结 参考文献 1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.外观模式(Facade Pattern)属于 ...

  5. Java设计模式快速入门之外观模式

    3.2Java设计模式快速入门之外观模式 3.2.1概念 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向 ...

  6. 【设计模式与体系结构】代理模式

    [设计模式与体系结构]代理模式 文章目录 [设计模式与体系结构]代理模式 一.实例分析 二.代码实现 三.实现结果 一.实例分析 (1) 代理模式设计一个房产中介的模拟程序. 要求:房产中介有介绍和代 ...

  7. 软件设计模式与体系结构实验——2.1-1(2)(抽象)工厂模式的应用

    文章目录 一.实验三 工厂模式的应用 1.实验目的 2.实验内容 3.模式UML图 4.模式代码 5.运行截图 6.实验小结 二.实验四 抽象工厂模式的应用 1.实验目的 2.实验内容 3.模式UML ...

  8. 23种设计模式(十一)外观模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  9. 设计模式(三)外观模式

    wiki:外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 相当于将一系列不同的类方法调用,封装到一个 ...

最新文章

  1. LeetCode简单题之统计匹配检索规则的物品数量
  2. C++ 中this指针的用途
  3. python面向什么编程_python基础-面向过程编程
  4. 如何在SAP Server Side JavaScript里消费destination
  5. [家里蹲大学数学杂志]第236期钟玉泉复变函数论前六章第二组习题参考解答
  6. PMP读书笔记(第5章)
  7. 微软:软件帝王的复兴之路
  8. 公司新来的小可爱,竟然把内存搞崩了!
  9. echarts里面的参数解释_Echarts适用小技巧:适用参数详细说明及示例-TS文件
  10. linux 进程崩溃 wait,Linux信号机制有关问题
  11. [ARM] [基础][编译]ARM的浮点功能历史分类和对应的编译选项
  12. 【图像隐写】基于matlab GUI DWT+DCT+SVD数字水印嵌入提取攻击(带面板)【含Matlab源码 1664期】
  13. mysqld已删除但仍占用空间的_活见鬼,明明删除了数据,空间却没减少
  14. matlab实现QPSK调制解调
  15. 一次关于聚合根的激烈讨论
  16. Linux内核中dev_info、dev_dbg、dev_err及动态调试
  17. Java 两个日期间的天数计算
  18. 鸽子的迷信行为(pigeon superstition)
  19. idea git输错密码的处理 win10
  20. Python输入身高体重并计算BMI

热门文章

  1. python程序设计课后答案第三单元_智慧职教APPPython程序设计课后答案
  2. Android 调音器开发
  3. 从 0 到 1 教你在亚马逊云科技中部署动态网站 Typecho 系统
  4. 构建scrapy项目
  5. 承包人将建设工程分包,与他人签订的合同是否一定无效?
  6. FPGA基础知识----FPGA 简介
  7. Python函数案例分享和答疑---第四次直播笔记
  8. mysql 小试牛刀
  9. stm32 控制 lcd1602
  10. 数学知识----质数