外观模式

1. 概念

外观模式的主要目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单得使用子系统。它负责把客户端的请求转发给子系统内部的各个模块进行处理。主要是组合已有功能以实现客户端请求,而不会添加新的需求。


image.png

2. 使用场景

当要为一个复杂子系统提供一个简单接口时。
客户程序与抽象类的实现部分之间存在着很大的依赖性。
当需要构建一个层次结构的子系统时。

3. 实例

public class Module1 {
    public void testFunctionA() {
        System.out.println("testFunctionA from Module1");
    }
}
public class Module2 {
    public void testFunctionB() {
        System.out.println("testFunctionB from Module2");
    }
}

public class Module3 {
    public void testFunctionC() {
        System.out.println("testFunctionC from Module3");
    }
}
public class Facade {
    private Module1 module1 = null;
    private Module2 module2 = null;
    private Module3 module3 = null;
    private static Facade facade = null;

    private Facade() {
        module1 = new Module1();
        module2 = new Module2();
        module3 = new Module3();
    }

    public static Facade getFacade() {
        if (facade == null) {
            facade = new Facade();
        }
        return facade;
    }

    public void testOperation() {
        module1.testFunctionA();
        module2.testFunctionB();
        module3.testFunctionC();
    }
}

public class Client {
    public static void main(String[] args) {
        Facade.getFacade().testOperation();
    }
}

4. 特点

由于Facade类封装了各个模块交互的过程,如果今后内部模块调用关系发生了变化,只需要修改Facade实现就可以了。
Facade实现是可以被多个客户端调用的。

5. 在android的运用

contextimpl

推荐阅读更多精彩内容