【设计模式】第九章:外观模式(门面模式)详解及应用案例

文章详细介绍了设计模式中的外观模式,包括定义、角色分类、实现方式、应用场景和优缺点。通过具体的代码示例展示了如何创建一个外观角色来统一调用多个子系统的操作,降低了客户端与复杂系统之间的依赖。

系列文章

【设计模式】七大设计原则
【设计模式】第一章:单例模式
【设计模式】第二章:工厂模式
【设计模式】第三章:建造者模式
【设计模式】第四章:原型模式
【设计模式】第五章:适配器模式
【设计模式】第六章:装饰器模式
【设计模式】第七章:代理模式
【设计模式】第八章:桥接模式
【设计模式】第九章:外观模式 / 门面模式
【设计模式】第十章:组合模式
【设计模式】第十一章:享元模式
【设计模式】第十二章:观察者模式
【设计模式】第十三章:模板方法模式
【设计模式】第十四章:策略模式
【设计模式】第十五章:责任链模式
【设计模式】第十六章:迭代器模式
【设计模式】第十七章:状态模式
【设计模式】第十八章:备忘录模式
【设计模式】第十九章:访问者模式
【设计模式】第二十章:解释器模式
【设计模式】第二十一章:命令模式
【设计模式】第二十二章:中介者模式



一、定义

摘自百度百科: 是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。


二、角色分类

外观角色(Facade)

也被称为门面角色,是系统对外的统一接口

子系统角色(SubSystem)

子系统可以为多个,其并不知道外观角色的存在

客户角色(Client)

调用方法的角色


三、实现方式

UML图

Image.png

具体实现

我们在现实中就有相应的例子,假如我们有一个开关板,然后当我们点它的时候就会执行一系列的操作,接下来我们使用代码实现一下

外观角色(Facade)

public class SwitchBoard {
  private final CircuitA circuitA = new CircuitA();
  private final CircuitB circuitB = new CircuitB();
  private final CircuitC circuitC = new CircuitC();
  public void start() {
    circuitA.start();
    circuitB.start();
    circuitC.start();
  }
}

CircuitA

子系统角色(SubSystem)

public class CircuitA {
  public void start() {
    System.out.println("点开电路A");
  }
}

public class CircuitB {
  public void start() {
    System.out.println("打开电路B");
  }
}

public class CircuitC {
  public void start() {
    System.out.println("打开电路C");
  }
}

客户角色(Client)

public class Client {
  public static void main(String[] args) {
    SwitchBoard switchBoard = new SwitchBoard();
    switchBoard.start();
  }
}

运行结果

打开电路A
打开电路B
打开电路C

四、应用场景

以下部分内容摘自菜鸟教程

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

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

何时使用:

  1. 客户端不需要知道系统内部的复杂联系,整个系统只需要提供一个“接待员”即可
  2. 定义系统的入口

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

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

应用实例:

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

适用场景:

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

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


五、优缺点

优点

  1. 减少系统相互依赖
  2. 提高灵活性
  3. 提高安全性

缺点

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


推荐

关注博客和公众号获取最新文章

Bummon’s BlogBummon’s Home公众号

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bummon.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值