大话设计模式——13.外观模式(Facade Pattern)

简介

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

UML图
在这里插入图片描述

应用场景:

  • 第三方SDK大多使用该模式,通过一个外观类,可对用户屏蔽很多实现细节
  • 对于复杂难以维护的老系统进行拓展
  • 外界对子系统的访问只能黑盒操作,需要对一个复杂的模块或子系统提供一个对外界访问的接口
示例
  1. 子系统类:
public interface MessageManager {

    /**
     * 推送信息
     */
    void pushMessage(String msg);
}
public class MailMessage implements MessageManager {

    @Override
    public void pushMessage(String msg) {
        System.out.println("邮箱推送:" + msg);
    }
}
public class SMSMessage implements MessageManager {

    @Override
    public void pushMessage(String msg) {
        System.out.println("短信推送:" + msg);
    }
}
  1. 外观类
public class MessageFacade implements MessageManager {

    private MailMessage mailMessage = new MailMessage();

    private SMSMessage smsMessage = new SMSMessage();


    @Override
    public void pushMessage(String msg) {

        mailMessage.pushMessage(msg);
        smsMessage.pushMessage(msg);
    }
}
  1. 运行
public class Main {

    public static void main(String[] args) {
        MessageFacade messageFacade = new MessageFacade();
        messageFacade.pushMessage("你有一条新消息!");
    }
}

在这里插入图片描述

总结
  • 优点:
    • 减少系统之间的相互依赖,提高灵活性
    • 符合依赖倒转原则(面向接口编程)
    • 符合迪米特法则(最少知道原则,类之间应尽量少的发生相互作用)
  • 缺点
    • 增加了系统的调用链路
    • 不符合开闭原则,如果有新增逻辑,则外观类需要进行修改

相关推荐

  1. 设计模式外观模式

    2024-04-09 15:46:02       36 阅读
  2. 设计模式——外观模式

    2024-04-09 15:46:02       27 阅读
  3. 设计模式-外观模式

    2024-04-09 15:46:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 15:46:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 15:46:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 15:46:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 15:46:02       20 阅读

热门阅读

  1. 【系统架构师】-23种设计模式

    2024-04-09 15:46:02       11 阅读
  2. ubuntu 安装多版本 python 并使用

    2024-04-09 15:46:02       16 阅读
  3. Android Hal service compatibility matrix

    2024-04-09 15:46:02       15 阅读
  4. 在react项目中使用redux和reduxjs/toolkit

    2024-04-09 15:46:02       16 阅读
  5. 常见的行为识别算法及视频处理算法

    2024-04-09 15:46:02       12 阅读
  6. 搞懂了XML!

    2024-04-09 15:46:02       14 阅读
  7. 在Linux删除几天前的日志文件

    2024-04-09 15:46:02       12 阅读
  8. Spring与Spring Boot的区别和联系

    2024-04-09 15:46:02       13 阅读
  9. html自定义禁用状态下且已选中的checkbox

    2024-04-09 15:46:02       13 阅读
  10. 对称排序(蓝桥杯)

    2024-04-09 15:46:02       13 阅读
  11. 软件版权登记的条件

    2024-04-09 15:46:02       15 阅读