• 设计模式-门面模式


    门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。

    其实门面系统很简单,甚至我们在开发的时候也是一直在用,比如MVC,所有的service层就相当于很多个子系统,所有的Controller层就像是一个门面,客户端调用Controller来实现功能,再比如所有的dao层是很多个子系统,那么此时所有service其实也就是门面。就那么简单,只是我们在平时开发的过程中没有感知而已

    门面模式通用UML类图

    主要角色有:

    1. 外观角色(Facade):也称门面角色,系统对外的统一接口
    2. 子系统角色(SubSystem):可以同时有一个或者多个SubSystem,SubSystem并不知道Facade的存在,Facade对于SubSystem而言仅仅只是一个客户端

    通用代码示例

    1. public class Facade {
    2. private final SystemA systemA = new SystemA();
    3. private final SystemB systemB = new SystemB();
    4. private final SystemC systemC = new SystemC();
    5. public void doSomething() {
    6. systemA.doSomething();
    7. systemB.doSomething();
    8. systemC.doSomething();
    9. }
    10. }
    11. 复制代码
    1. public class SystemA {
    2. public void doSomething() {
    3. System.out.println("调用A系统");
    4. }
    5. }
    6. 复制代码
    1. public class SystemB {
    2. public void doSomething() {
    3. System.out.println("调用B系统");
    4. }
    5. }
    6. 复制代码
    1. public class SystemC {
    2. public void doSomething() {
    3. System.out.println("调用C系统");
    4. }
    5. }
    6. 复制代码
    1. public class Client {
    2. public static void main(String[] args) {
    3. Facade facade = new Facade();
    4. facade.doSomething();
    5. }
    6. }
    7. 复制代码

    门面模式在源码中的应用

    我们可以看一下tomcat源码中的RequestFacade

    发现其实就是对Request的封装,其中Request就是对应的子系统

    门面模式应用场景

    1. 对分层结构系统构建时,使用门面模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
    2. 当一个复杂系统的子系统很多时,外门面模式可以为系统设计一个简单的接口供外界访问
    3. 当客户端与多个子系统之间存在很大的联系时,引入门面模式可将它们分离,从而提高子系统的独立性和可移植性

    门面模式优缺点

    优点:

    1. 简化了调用过程,无需深入了解子系统
    2. 减少系统依赖
    3. 更好的划分层次
    4. 遵循迪米特法则

    缺点:

    1. 不符合开闭原则
    2. 有可能出现违背单一职责原则

    门面模式和代理模式的区别

    可以说门面模式是特殊的静态代理模式
    最大的区别在于代理模式注重于方法的增强而门面模式则是方法的封装

  • 相关阅读:
    java程序连接redis服务器
    flutter监听键盘输入做出反应
    音频处理-画时域图和频谱图
    计算机底层原理
    怎样翻译文本?这三种翻译方法我经常使用
    软件测试(五)自动化 selenium
    【计算机网络】HTTPS
    使用sqlmap总是提示需要302跳转重新登录的解决方法
    Python 自动化教程(1) 概述,第一篇 Excel自动化首篇
    基于安卓平台的校园社交app设计
  • 原文地址:https://blog.csdn.net/BASK2311/article/details/127880095