背景:
模块目前需要为应用开发开放位置面板,意思就是可以通过接口获取应用开发的位置面板,而目前模块具有自己的默认面板。需求要求首先使用应用开发的位置面板,如果没有,就是用目前模块使用的默认面板。
需要解决的问题:
1.取位置面板,而目前的位置面板都是静态使用。
2.开发的位置面板和现有的位置面板接口不兼容。
方案分析:
1.为了解决上面的第2个问题,让当前模块把应用开发的位置面板当成当前模块的面板来使用,就需要把接口统一起来。从而才好解决第一个问题。
2.不管是应用的位置面板还是当前模块的位置面板,在抽象层次上来说,都是面板,现在要解决的一个关键为问题实现动态获取面板的问题,因为之前的面板都是静态使用的,在具体的使用条件下实例化了相应的子类面板。
3.为了不改变现有模块的静态使用,必须使用一个面板来替代原来的位置面板。
解决方案:
1.为了让接口兼容,此处需要实现一个位置面板Adapter,用来适配应用开发的位置面板。从而达到使用的一致性。
2.为了保持以往静态使用位置面板的方式,需要构造一个类来替代原有的位置面板,故这个地方需要使用Proxy模式。
实现:
1.只知道应用位置面板的抽象类,不能使用类Adapter模式,只能使用对象Adapter模式,Adapter包含一个到应用位置面板的引用。
2.位置面板Proxy需要包含一个到真实面板的引用。
3.位置面板Proxy需要实现原有位置面板的接口。
4.位置面板Proxy需要根据条件动态获取真实的位置面板。
4.创建一个位置面板的Factory,在不同的条件下创建相应的位置面板。供位置面板Proxy使用。