外观设计模式

外观模式

主要的目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单得使用子系统,他负责把客服端的请求转发给子系统内部的各个模块进行处理.

使用场景

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

案例代码:

//模块一
public class ModuleA {
    public void testA(){
        System.out.println("this is module A");
    }
}

//模块二
public class ModuleB {
    public void testB(){
        System.out.println("this is module B");
    }
}

//模块三
public class ModuleC {
    public void testC(){
        System.out.println("this is module C");
    }
}

外观类

public class Facade {
    private ModuleA moduleA = null;
    private ModuleB moduleB = null;
    private ModuleC moduleC = null;
    private static Facade mFacade = null;

    private Facade() {
        moduleA = new ModuleA();
        moduleB = new ModuleB();
        moduleC = new ModuleC();
    }

    public static Facade getInstance() {
        if (mFacade == null) {
            mFacade = new Facade();
        }
        return mFacade;
    }

    public void testOperation() {
        moduleA.testA();
        moduleB.testB();
        moduleC.testC();
    }
}

测试用例:

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

优点

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

在Android中运用

contextImpl是android中的外观类

Facade01.png
Facade02.png
Facade03.png
Facade04.png
Facade05.png
Facade06.png
Facade07.png

推荐阅读更多精彩内容