外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

介绍

意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合

关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

实现

我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker

ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用 ShapeMaker 类来显示结果。

个人理解就是:将系统内部的各种功能注册到一个对外的接口中(外观接口类),调用这个接口对象的方法来执行各个真实功能类的方法。

(在外部接口类中将配置所有系统内部功能类的引用)

步骤 1

创建一个接口。

Shape.java

public interface Shape { void draw(); }

步骤 2

创建实现接口的实体类。

Rectangle.java

public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }

Square.java

public class Square implements Shape { @Override public void draw() { System.out.println("Square::draw()"); } }

Circle.java

public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }

步骤 3

创建一个外观类。

ShapeMaker.java

步骤 4

使用该外观类画出各种类型的形状。

FacadePatternDemo.java

步骤 5

执行程序,输出结果:

Circle::draw()
Rectangle::draw()
Square::draw()

具体应用场景:

结构型模式:外观模式(门面模式)相关推荐

  1. Java设计模式之结构型:外观模式

    一.什么是外观模式: 外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口.使用外观模式有以下几点好处: (1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要 ...

  2. JavaScript设计模式(三):结构型设计模式-外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式

    JavaScript设计模式 - 结构型设计模式 套餐服务-外观模式 外观模式(Facade) 水管弯弯-适配器模式 适配器模式(Adapter) 适配异类框架 参数适配 牛郎织女-代理模式 代理模式 ...

  3. 6中结构型设计模式的对比理解(Composite组合模式,Proxy代理模式,Flyweight享元模式,Facade门面模式,Bridge桥接模式,Decorator装饰器模式)

    结构型模式 结构型模式用来组装 类和对象,以获得更大的结构. 结构型类模式,通过继承机制来组合接口或类.简单的例子就是多重继承,最后一个类拥有所有父类的性质.这个模式有助于独立开发一个协同类.另一个例 ...

  4. 《设计模式详解》结构型模式 - 外观模式

    外观模式 5.5 外观模式 5.5.1 概述 5.5.2 结构 5.5.3 案例 5.5.4 使用场景 5.5.5 Tomcat 源码 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! ...

  5. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  6. 设计模式05——结构型模式

    一.概述  结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象.由于组合关系或聚合关系比继承关系耦合 ...

  7. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  8. 结构型模式之二其他模式

    文章目录 1. 桥接模式 1.1 角色职责 1.2 使用场景 2 装饰器模式 2.1 例子 2.2 角色职责 2.3 框架中的使用 3.适配器模式 3.1 角色职责 3.2 例子 3.3 框架中的应用 ...

  9. 详解23种设计模式(基于Java)—— 结构型模式(三 / 五)

    目录 3.结构型模式(7种) 3.1.代理模式 3.1.1.概述 3.1.2.结构 3.1.3.静态代理 3.1.4.JDK动态代理 3.1.5.CGLIB动态代理 3.1.6.三种代理的对比 3.1 ...

  10. 【设计模式】结构型模式

    文章目录 前言 为什么用结构型模式 适配器模式 代码 应用场景 桥接模式 代码 应用场景 装饰器模式 代码 应用场景 代理模式 代码 应用场景 装饰器模式与代理模式区别 外观模式 代码 应用场景 组合 ...

最新文章

  1. python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例
  2. html video标签问题,用HTML5 video标签的一系列问题
  3. 有时间看下这个,分布式缓存,提高并发的
  4. android录音功能的实现
  5. 【VC基础】 6、VC条件定价
  6. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,一篇是王飞跃等人翻译的美国卡内基梅隆大学计算机科学系主任.PPT...
  7. 选了combobox里的选项后没激发change事件_stata 事件分析法
  8. 工作132:页面布局
  9. 框架源码专题:Spring的事件监听、发布机制 ApplicationListener
  10. 【报告分享】2019中国硬科技发展白皮书(195页官方版).pdf(附下载链接)
  11. Android粒子爆炸特效[可用于任意控件]
  12. 分享一个好的数据集资源目录
  13. 数据库图书管理系统设计报告(基于软件工程)
  14. SRCNN-pytoch代码讲解
  15. 转载:日本动漫发展史(新浪网)
  16. 树莓派 查看当前cpu温度
  17. 智能微模块一体化机柜
  18. nginx交叉编译流程
  19. 生成扩散模型漫谈:统一扩散模型(应用篇)
  20. 安永亚太技术实验室在深圳成立;松下能源将为Lucid Air豪华电动汽车供应锂离子电池 | 美通企业日报...

热门文章

  1. BigDecimal的使用举例,包括阶乘的相加求法思路
  2. unity3d v5.1.1 ugui 带垂直滚动条的文本框
  3. rtorrent - 强大的命令行BT客户端
  4. 将自己的APK变成系统的APK
  5. ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
  6. 如何用Matlab求矩阵的秩、乘积、逆、行列式的值、转置
  7. 关于librtmp接收数据(接收网络电视的数据流)
  8. 删除第一个_学习数据结构--第二章:线性表(顺序存储、插入、删除)
  9. 云计算实训总结_云计算实习报告.doc
  10. pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf