概念
外观模式的主要目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单地使用子系统,它负责把客户端的请求转发给子系统内部的各个模块 进行处理。
他只是实现功能的组合调用,只是各个模块的功能的一个组合而已,而不是像 装饰模式。
使用场景
1.当你要为一个复杂系统提供一个简单的接口时
2.客户程序与抽象类的实现部分之间存在着很大的依赖性
3.当你需要构建一个层次结构的子系统时。
其实就是拦截了一层,客户端掉用方 是不需要改的。
为了让整个系统只有一个外观类,用了单例
在android中的应用
contextImpl
AcitivityThread.java 的 main()
开启一个 looper,
然后就找handlerMessage
找到 handlerLaunchActivity()
然后performLaunchActivity()
里面的
activity.attch( appContext ,等等)
所以Acivity 的父类也是context ,并不实现具体的功能,他只是继承context 接口,他具体的操作会交给 contextImpl 这个类去做,因为他用到的是 contextImpl 的外观设计模式。
然后看act 中的attah()
里面的 attachBaseContext
再往下看的到, 这个context 被传给了 Context mBase;
所以 activity 的内部就持有了 context的引用。
所以 activity 充当的 是代理类,他代理了 contextImpl 去做的事情。