Facade
这个外观类为子系统们提供一个共同的对外接口
Clients
客户对象通过一个外观接口读写子系统中各接口的数据资源
在以下情况下可以考虑使用外观模式:
(1) 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个旧系统的时候,系统已经非常难以修改,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
适用场景:
(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
迪米特法则(最少知道)
合成复用原则(多拼凑,少继承)
缺点:不符合开闭原则(扩展开放、修改关闭)
接口隔离(多个专用接口替代一个统一的接口)
mybatis org.apache.ibatis.session.Configuration
slf4j StaticLoggerBinder
Spring JDBC中的JdbcUtils
Tomcat Facade RequestFacade
https://github.com/apache/tomcat/blob/3e5ce3108e2684bc25013d9a84a7966a6dcd6e14/java/org/apache/catalina/connector/RequestFacade.java