门面模式

门面模式

特征: 门面模式定义了一个高层接口, 让子系统更容易使用.属于结构型模式

适用场景: 子系统越来越复杂, 增加门面模式提供简单接口。

                  构建多层系统结构, 利用门面对象作为每层的入口, 简化层间调用

public class SubSystemA {
    public void doA() {
        System.out.println("doing A stuff");
    }
}
public class SubSystemB {
    public void doB() {
        System.out.println("doing B stuff");
    }
}
public class SubSystemC {
    public void doC() {
        System.out.println("doing C stuff");
    }
}
public class Facade {
    private SubSystemA a = new SubSystemA();
    private SubSystemB b = new SubSystemB();
    private SubSystemC c = new SubSystemC();
    public void exchange(){
        this.a.doA();
        this.b.doB();
        this.c.doC();
        
    }
}
public static void main(String[] args) {
    Facade facade = new Facade();
    facade.exchange();
}

优点: 1、简化了调用过程,无需深入了解子系统, 以防给子系统带来风险

           2、减少系统依赖, 松耦合

            3、更好地划分访问层次, 提高了安全性

            4、遵循迪米特法则(最少知道原则)

缺点: 1、当增加子系统和扩展子系统行为时, 可能容易带来未知风险

         2、不符合开闭原则

          3、某些情况下可能违背单一职责原则

源码中的运用: sprign中的JdbcUtils;Mybatis中的Configuration;Tomcat中的RequestFacade、ResponseFacade、StandardSessionFacade。

门面模式就是特殊的静态代理模式

门面模式: 重点在于封装;代理模式: 重点在于增强;不做增强的静态代理就是门面模式;委派模式也是一张静态代理;

门面模式有可能做成单例;工具包,如spring中的JdbcUtils