其实要理解外观模式,特别的简单
1.网上有个电脑启动的例子,电脑启动包括 CPU ,内存,硬盘都需要启动,如果我他们每个启动都放在同一的接口中,只需要一次启动,电脑就启动了,用户不知道,其实他启动了3个东西,这就是外观模式
对于用户而言,他只关心一个接口,不关心其他的,可以降低依赖关系
实现上来说:将一群接口封装在一起,只有一个接口暴露给外部调用者
最核心的一句话说明:就是提供一个公共接口给你用,访问系统、程序、服务、资源等
其实这个时候有人就把这个 外观模式和 代理模式进行比较,因为都是 用户只和一人进行交互,至于你怎么实现的你不用告诉我,
代理模式模式中,说到了租房子这件事,租客只跟中介(代理)说我要租房子,但是代理到底都做了什么事我不关心,其实现实生活中代理做了很多事,比如跟房东联系房价、钥匙等信息,跟物业联系门禁卡的相关信息,甚至中介还需要告诉租客相关的交通信息等,代理做了很多事,只不过这些方法都是封装在租房子那个事件对象中,代理拿来调用就行了,用户也不用关心
外观模式:当租房子这些细节如果都说起来,粒度就很细了,其实就是有很多的代理组成一个最大的代理,如果能明白这个,我觉得,他们的区别也就出来了,
外观模式就是把很多细粒度的方法进行封装在一起,形成一个统一的接口给外部调用,
也就是说:当代理类有很多代理的时候(持有很多原有对象),就变成了外观模式了(外观类)
外观模式还有一种情况就是:那个音乐播放的例子,其实音乐就是一个抽象,但是有很多音乐实例,顺序播放和循环播放,以及单曲播放,用户只与外观模式打交道,这里面的外观模式就是客户端的主类了,顺序播放就是把map里面装着的所有music调用play()就行了,随机播放就是while循环(true死循环),随机选择一个数对应的music播放,
用户调用只需要执行 顺序播放和随机播放就可以了,这也是一个外观模式的具体应用。这里面的music类就是每一个原有的对象,只不过这个对象有特点,他们是一样的,不像电脑启动的时候,每个对象不一样。
你也可以说我持有 客户端这个代理模式,分别调用不同的播放,不就行了,
所以我觉得代理模式和外观模式应该是一个东西了,都不需要传递参数,只是外观模式从更细的粒度上把所有的源对象都给搞出来了,封装成一个接口给你调用就可以了
说了这么多,Android中外观模式的使用也是非常的广泛的,
1.系统服务管理类,就是一个外观模式类,比如:窗口管理服务类,windowManager,InputManager,activityManager,ServiceManager
2.ContentResolver,Log,Context,都是提供公共接口访问整个系统的接口或者访问其他系统服务的接口