首先说一下设计模式的六大原则:
1、单一职责原则
一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
2、开闭原则
对修改关闭,对扩展开放。
3、依赖倒转原则
依赖倒转原则,指高层模块不应该依赖低层模块,两个都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。说白了就是要针对接口编程,不要对实现编程。
4、里氏代换原则
里氏代换原则,子类型必须能够替换掉他们的父类型。
5、迪米特法则(Law of Demeter)
迪米特法则也称最少知识法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
6、接口隔离原则
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上
我很疑惑的是单一职责原则跟接口隔离原则,觉得这两个是重复的。
其实应该是这样理解,首先接口隔离原则需要满足单一职责原则,其次才是客户端不应该依赖它不需要的接口,那么问题来了, 父类接口与子类接口 谁大谁小呢?
我理解一般父类接口要小,功能较少,而子类接口功能更多,一个类对另一个类的依赖应该建立在最小的接口上这句又该如何解释呢,以ExecutorService与Executor接口为例,Executor是父接口,ExecutorService是子类接口,那么为什么Executors中使用的都是ExecutorService接口呢,关键是需求,需求是只需要父类接口的功能还是需要子类接口的扩展功能,这决定了使用哪个接口,如果父类接口能满足要求,那么依赖父类接口,否则依赖子类接口。