有时候会有这样一种需求:
一个baseClass有一个static的getInstance方法,而在该基类中又定义了几种定位不同需求extends自此类的subClass
未知的>,然后基类的getInstance方法根据不同情况返回不同的subClass子类实例,因为都是extends自baseClass,所以可以被按照baseClass的契约来使用.
上面的说白了就是一个简单的工厂模式.
这里是提供了一种和上面实现手法不一样的实现方式,不过封装性会有某种破坏:
一个baseClass内部维护一个public/protected static 的baseClass类型的sIntance引用, 初始值为null, baseClass基本只实现一个static的方法getInstance(),
然后是一堆根据需求声明的abstarct方法.
至于具体的impl subClass,这次则不必作为baseClass的内部类被定义,而是外部定义一个impl subClass即可,subClass impl了abstarct方法,关键的一点是
为subClass实现一个static的init方法来将继承自baseClass的sIntance指向一个new的subClass实例,
然后外部在使用baseClass的getInstance的时候得到就是一个subClass实例.
上面这种方法是比较另类的,利用了protected /public static 变量在baseClass和subClass之间的共享性实现了subClass实例的设置
和设置. 这里一个破坏封装性的操作就是需要调用subClass的static来设置sInstace,不过如果从大模块的角度看,也不算是破坏.
简单记录一下.