Interface Segregation Principlebash
客户端不该依赖它不须要的接口学习
类间的依赖关系应该创建在最小的接口上spa
其实通俗来理解就是,不要在一个接口里面放不少的方法,这样会显得这个类很臃肿。接口应该尽可能细化,一个接口对应一个功能模块,同时接口里面的方法应该尽量的少,使接口更加灵活轻便。或许有的人认为接口隔离原则和单一职责原则很像,但两个原则仍是存在着明显的区别。单一职责原则是在业务逻辑上的划分,注重的是职责。接口隔离原则是基于接口设计考虑。例如一个接口的职责包含10个方法,这10个方法都放在同一接口中,而且提供给多个模块调用,但不一样模块须要依赖的方法是不同的,这时模块为了实现本身的功能就不得不实现一些对其没有意义的方法,这样的设计是不符合接口隔离原则的。接口隔离原则要求"尽可能使用多个专门的接口"专门提供给不一样的模块。.net
类A经过接口I依赖类B,类C经过接口I依赖类D,若是接口I对于类A和类B来讲不是最小接口,则类B和类D必须去实现他们不须要的方法。 设计
举例:code
public interface School {
/**
* 上课
*/
void attendClass();
/**
* 下课
*/
void afterClass();
/**
* 学习
*/
void learn();
/**
* 讲课
*/
void lecture();
}
复制代码
假设此时有一个People类,它的角色是学生,实现了School接口。它就会被迫实现“讲课”这个方法,事实它是不须要该方法的。这就形成了代码的冗余,使咱们的代码变得臃肿。cdn
将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们须要的接口创建依赖关系。 blog
举例: 学校接口
接口
public interface School {
/**
* 上课
*/
void attendClass();
/**
* 下课
*/
void afterClass();
}
复制代码
老师接口
ip
public interface Teacher {
/**
* 讲课
*/
void lecture();
}
复制代码
学生接口
public interface School {
/**
* 学习
*/
void learn();
}
复制代码
经过上面的拆分咱们就能够有效避免冗余代码的产生,进而还能够促使咱们的代码变得更加灵活。
一个类若是要实现一个接口,那么就要实现这个接口要求的全部方法,若是这个接口里面包含这个类不须要的方法,那么就会形成接口污染,这是很差的设计,会对系统留下隐患。
一个类是能够同时实现多个接口的,因此将一个臃肿的接口分割为若干个小接口,经过小接口的不一样组合能够知足更多的需求。
定制服务就是单独为一个个体提供优良的服务。咱们在作系统设计时也须要考虑对系统之间或模块之间的接口提供定制服务。提供定制服务就必然有一个需求:只提供访问者须要的方法。这也是能够经过细化接口实现的。
什么是高内聚?高内聚就是提升接口、类、模块的处理能力,减小对外的交互。好比说,你告诉你的下属“一个小时以内去月球搬一块石头回来”,而后你就躺在海滩上晒着太阳喝着果汁,一个小时以后你的下属就搬着一块月亮上的石头回来给你了。这种不讲任何条件,不须要你关心任何细节,当即完成任务的行为就是高内聚的表现。
具体到接口中,仍是尽可能细化你的接口。接口是对外界的承诺,承诺越少对系统的开发越有利,变动的风险也就越少,同时也有利于下降成本。
公众号: