学习设计模式 - 六大基本原则之接口隔离原则
设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregation Principle),D-依赖倒置原则(Dependence Invension Principle)。
I-接口隔离原则(Interface Segregation Principle)
二、理解
1. 什么是接口?
1)实例接口 (object interface)
Person zhangsan=new Person("zhangsan")。 Person就是zhangsan实例的接口。
2)类接口(class interface)
在java中,直接由关键字interface定义的类,称为接口。
2.什么是隔离?
1) 客户端不应该依赖它不需要的的接口。(Clients should not be forced to depend upon interfaces that they don't use. )
2) 类间的关系应该建立在最小的接口上。 (The dependency of one class to anthor one should depend on the smallest possible interface.)
简而言之, 不要写笼统的接口,接口要尽量细化,方法要尽量少。这样的优势在于,能够减少变更影响的范围,隔离变化。
单一职责原则和接口隔离原则的审视角度不同。单一职责原则从职责的角度考虑, 从业务逻辑的角度划分, 要求某个类的职责要单一。该类可以为多个模块提供方法访问。而接口隔离原则是从使用的角度考虑的,需要为多个模块提供多个专门的接口,对应的接口方法应单一,专门为某个模块提供访问,某个模块不需要的方法,不需要写上去。
三、优缺点
1. 优点:接口越细,越灵活,能够在客户提出“无理”要求时,更好的应付变化,有更好的可维护性
2. 缺点:如果接口太细,会造成类接口”膨胀“, 增加系统的复杂性
四、注意事项
1. 接口要尽量小,不要写臃肿的接口,小的前提是单一职责原则。
2. 接口要“高内聚”, 接口是对外的承诺,越少越好,对外的承诺越少,变更的风险越少
3. 定制服务。定制服务就是为每个个体提供优良的服务,在做系统设计时需要考虑对系统之间或模块之间的“相互访问”接口采用定制服务。
4. 接口设计是有限度的,
5. 一个接口只服务于一个子模块或业务逻辑。
6. 通过业务逻辑压缩接口中的public方法
7. 已经被污染的接口,尽量去修改,弱变更的风险较大,则采用适配器模式进行转化
8. 好的接口设计,需要深入了解业务逻辑,不可盲从。
学习资料:
《设计模式之禅》秦小波 著