13 外观模式

13.1 外观模式概述

Facade Pattern: 为子系统的接口提供一组统一的入口。外观模式定义了一个高层接口,这个接口使得子系统的更加容易使用。

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

外观模式是迪米特法则的一种具体实现,通过引入一个外观角色降低原有系统的复杂度,同时降低客户类与子系统的耦合度。

此处复习一下迪米特法则的内容描述:

迪米特法则: 每一个软件单元对其他单元都只有最少的信息,而且局限于那些与本单元密切相关的软件单元。迪米特法则要求一个软件实体应该尽可能少地与其他实体发生相互作用。

外观模式结构图如下所示:

13.2 外观模式实现

13.2.1 外观类

客户端调用外观类的方法,外观类将客户端请求委派给相应的子系统处理。

public class Facade {
private SubSystemA subA = new SubSystemA();
private SubSystemB subB = new SubSystemB();
private SubSystemC subC = new SubSystemC(); public void method(String s) {
String resA = subA.methodA(s);
String resB = subB.methodB(resA);
subC.methodC(resB);
}
}

13.2.2 子系统类

子系统处理外观类传过来的请求;子系统并不知道外观类的存在,外观类仅仅是封装了多个请求的一个客户端。

public class SubSystemA() {
public String methodA(String s) {
// 业务逻辑代码
}
} public class SubSystemB() {
public String methodB(String s) {
// 业务逻辑代码
}
} public class SubSystemC() {
public void methodA(String s) {
// 业务逻辑代码
}
}

13.2.3 客户端调用

public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.method();
}
}

13.3 抽象外观类

在上述外观模式中,如果需要增加或删除与外观类交互的子系统类,必须修改原有代码,违背开闭原则,因此可以通过引入抽象外观类对系统进行改进。

引入抽象外观类的外观模式结构图如下所示:

引入抽象外观类之后,客户端可以针对抽象层编程,对于新的业务需求,不需要修改原有的外观类,直接增加一个新的具体外观类即可,符合开闭原则。

13.4 外观模式优/缺点

外观模式使用场景:菜单栏或工具栏

外观模式的优点主要如下:

  • 对客户端屏蔽子系统组件,将客户端代码简化,与之关联的对象也减少
  • 实现了子系统与客户端之间的松耦合关系,使得子系统发生变化,无须修改客户端,只调整外观类即可

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

  • 不能很好的限制客户端直接使用子系统类,子系统类对客户端是可见的,不好限制客户端只能去调用外观类;
  • 设计不当会导致增加新的业务逻辑需要修改原有代码(未引入抽象外观类)

Java设计模式 —— 外观模式的更多相关文章

  1. Java设计模式——外观模式

    JAVA 设计模式 外观模式 用途 外观模式 (Facade) 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式是一种结构型模式. 结构

  2. 【设计模式】Java设计模式 - 外观模式

    Java设计模式 - 外观模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  3. java设计模式——外观模式(门面模式)

    一. 定义与类型 定义:门面模式,提供一个统一的接口,用来访问子系统中的一群接口,门面模式定义了一个高层接口,让子系统更容易使用 类型:结构性 二. 使用场景 子系统越来越复杂,增加外观模式提供简单调 ...

  4. JAVA 设计模式 外观模式

    用途 外观模式 (Facade) 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式是一种结构型模式. 结构

  5. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用.   解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中 ...

  6. Java设计模式-外观模式(Facade)

    外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口 ...

  7. 菜鸟版JAVA设计模式—外观模式

    外观模式是一种比較easy理解的模式,作用非常easy.就是解耦合. 结构也是非常easy,一个外观类.这个外观类持有非常多的业务类. 再由客户类去调用这个外观类去实现一些列的业务操作... 这个模式 ...

  8. java设计模式----外观模式(门面模式)

    外观模式主要应用场景在于为复杂的子系统提供一个简单的接口,提高子系统的独立性. 创建DrawerOne类: package facade; public class DrawerOne { publi ...

  9. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  10. java设计模式--单列模式

    java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...

随机推荐

  1. LoadRunner压力测试(web)

    1.打开Virtual User Generator->新建脚本->选择创建新脚本类型,web-HTTP,HTML->创建 2.录制脚本 3.停止脚本录制 4.创建controlle ...

  2. SQL的分类

    DDL: 数据定义语言,用来定义数据库对象(数据表,表 ,字段) : DML:数据操作语言,用来对数据库表中的数据进行增删改 : DQL:数据库查询语言,用来查询数据库中的表的记录 DCL:数据控制语 ...

  3. Linux env commands

    1.新机新增root 密码 sudo passwd root 2.新增用户密码 sudo passwd YOUR_USER_NAME NEW PW: NEW PW: 3.SSH Server sudo ...

  4. alia linux

    alias lrt='ls -lrt'

  5. vue3学习大全(1)

    # vue3.0 Vue3.0 在北京时间2020年9月19 日凌晨,发布了 3.0 版本,代号:*One Piece* ## 1.新特性 Vue 3 中一些需要关注的新功能包括: - [组合式 AP ...

  6. ORACLE数据库通过DBLINK连接另一个数据库

    ORACLE数据库通过DBLINK连接另一个数据库 亲测有效:create database link XXX --dblink名connect to 远程数据库用户名 identified by & ...

  7. mysql数据库备份(windows环境)

    备份:cmd输入指令,按照新数据库的字符集去备份,备份等待即可: 恢复:之前新建数据库,注意字符集问题,输入指令还原即可:

  8. Hadoop警告信息:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform.

    when键入命令: hadoop fs -ls / 若出现以下警告信息: Hadoop警告问题:WARN util.NativeCodeLoader: Unable to load native-ha ...

  9. LNK2001 无法解析的外部符号 "int const ROUND"

    今天在写代码时出现了这个错误,网上的解决方法都不合适 我的代码是这样,在一个cpp里申明了一个常量 //data.cpp const int ROUND = 3; 然后在一个头文件里申明为全局变量 / ...

  10. UAC的详细讲解(转载)

    win32中也有对UAC的操作方法 网址:https://blog.csdn.net/zuishikonghuan/article/details/46965159?locationNum=7& ...