门面模式(Facade Pattern)又叫作外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构型设计模式
用一个高层接口把对各个子系统的调用封装成高级接口的一次调用,理想情况除了高级接口不允许有其他接口可以调用子系统。
优点:
- 解耦,封装性好
- 减少子系统间的相互依赖,client只依赖于facade不关心具体的子系统,子系统之间不需要关心其余子系统的逻辑
缺点
- 不符合开闭原则
- 扩展子系统时带来风险
场景
- 分布式系统RPC接口
- 把一个复杂的业务模块抽象出来
- 提高子系统之间的独立性
框架
Mybatis的Configuration类
public MetaObject newMetaObject(Object object) {return MetaObject.forObject(object, this.objectFactory, this.objectWrapperFactory, this.reflectorFactory);}public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {ParameterHandler parameterHandler = mappedStatement.getLang().createParameterHandler(mappedStatement, parameterObject, boundSql);parameterHandler = (ParameterHandler)this.interceptorChain.pluginAll(parameterHandler);return parameterHandler;}public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler, ResultHandler resultHandler, BoundSql boundSql) {ResultSetHandler resultSetHandler = new DefaultResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds);ResultSetHandler resultSetHandler = (ResultSetHandler)this.interceptorChain.pluginAll(resultSetHandler);return resultSetHandler;}public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);StatementHandler statementHandler = (StatementHandler)this.interceptorChain.pluginAll(statementHandler);return statementHandler;}
Tomcat的RequestFacade封装了很多request的方法
