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

简介

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

UML图

应用场景:

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

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

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

    @Override
    public void pushMessage(String msg) {
        System.out.println("短信推送:" + msg);
    }
}
  1. 外观类
java 复制代码
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. 运行
java 复制代码
public class Main {

    public static void main(String[] args) {
        MessageFacade messageFacade = new MessageFacade();
        messageFacade.pushMessage("你有一条新消息!");
    }
}
总结
  • 优点:
    • 减少系统之间的相互依赖,提高灵活性
    • 符合依赖倒转原则(面向接口编程)
    • 符合迪米特法则(最少知道原则,类之间应尽量少的发生相互作用)
  • 缺点
    • 增加了系统的调用链路
    • 不符合开闭原则,如果有新增逻辑,则外观类需要进行修改
相关推荐
流星5211222 分钟前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
csdn_aspnet2 分钟前
Java 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
java
杯莫停丶8 分钟前
设计模式之:外观模式
java·设计模式·外观模式
乐之者v10 分钟前
Mac常用软件
java·1024程序员节
TDengine (老段)29 分钟前
TDengine 数据函数 ROUND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
TDengine (老段)32 分钟前
TDengine 数学函数 RAND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
從南走到北32 分钟前
JAVA无人自助共享系统台球室源码自助开台约球交友系统源码小程序
java·微信·微信小程序·小程序·1024程序员节
杯莫停丶41 分钟前
设计模式之:命令模式
设计模式·命令模式·1024程序员节·活动勋章
野犬寒鸦43 分钟前
从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
java·数据库·后端·mysql·1024程序员节
没有bug.的程序员2 小时前
Spring 常见问题与调试技巧
java·后端·spring·动态代理·1024程序员节