由抽象类DataSetObserver想到的

   android的database包中有这样一个抽象类DataSetObserver。

由抽象类DataSetObserver想到的

    第一眼看到这个类时,第一反应是为什么不设计成接口呢?或者即使是抽象类,方法为什么不是abstract的呢?

    想了想,马上明白原因了。如果这个类设计成接口,那么实现这个接口的类就要实现接口里面的所有方法。如果这个类设计成抽象类,而里面的方法都设计成abstract的,那么也同样,继承这个抽象类的类也要实现这些abstract方法。这样,如果某个用户只想实现onChanged方法,而另一个用户只想实现onInvalidated()方法,就没有办法做到了。这两个用户都得实现这两个方法。

    如果写成抽象类,就表明了该类需要继承,否则只有空方法没有任何用处。而里面的方法都都是空方法实现,这样,用户继承这个类的类,可以重写任意几个自己需要的方法就可以了。

    这个设计看起来很简单,但是却很巧妙。

转载于:https://my.oschina.net/tingzi/blog/223427