Tips of Java3 接口

参考资料:《Effective Java》第四章 类与接口

                   《重构 改善既有代码的设计》第十一章 处理概括关系

一、好难整理

9. 接口、抽象类 --《重构,改善既有代码的设计》

9.1 类之间彼此互用的方式有若干种:1、“使用一个类”通常以为这用到该类的所有责任区。 2、某一组客户只使用类责任区中的一个特定子集3、这个类需要与所有协助处理某些特定请求的类合作(其实相当于2 某些特定请求的类也就是只使用到这个类中的特定子集)

对于后两种情况,将真正用到的这部分责任分离出来通常很有意义。这样使用系统用法更加清晰,更容易看清楚责任划分。Java中这种责任划分是通过单继承、接口实现的。(如果某个类在不同环境下扮演截然不同的角色,使用接口是个好主意。)

Plus:接口是对行为的抽象,抽象类是对整个类进行抽象。如果只需要一个类去执行某种行为,优先使用接口。抽象类对整个类进行抽象还表示,如果需要抽象的部分、提取出来的部分不仅仅有函数,比如这个类还有一些字段等,那么就应该考虑使用抽象类。也就是说如果需要构造函数、或者需要保持状态(可以理解为有一些字段),那么使用抽象类。

 

10. 委托、继承的选择 --《重构,改善既有代码的设计》

10.1 这里的委托并不是c#中的delegate。举例说一个类A中包含了另一个类B的实例,A是委托类,B是受委托类。对A进行操作的时候,A的内部实现是把具体的逻辑交给B去处理。可以理解为装饰器模式。

10.2  A可以自由的选择实现受托类的哪些方法(其实相当于写了一个访问权限非常方便控制的受托类的子类)  当在继承结构中发现了子类只需要实现父类的一部分方法的时候就可以考虑使用委托替代继承

10.3 相反当在委托中,发现委托类需要重写受委托类的全部方法的时候,就应该考虑使用继承。

Plus:使用委托似乎更经常是受委托类是一个数据结构。

你可能感兴趣的:(Java)