接口隔离原则
客户端不应该依赖它不需要的接口,即一个类的依赖应建立在最小接口上
什么意思呢?
就比如一个类我继承A接口,那么我就要实现你的所有接口,然而现在我只想要你其中的一到两个方法,那么这就不是最小的接口
上代码:
//这种方案A类只使用了接口中的010203方法,0405方法没有使用,不符合接口依赖中最小接口原则
interface TestInterface{
void function01();
void function02();
void function03();
void function04();
void function05();
}
class One implements TestInterface{
@Override
public void function01() {
System.out.println("One实现方法一");
}
@Override
public void function02() {
System.out.println("One实现方法二");
}
@Override
public void function03() {
System.out.println("One实现方法三");
}
@Override
public void function04() {
System.out.println("One实现方法四");
}
@Override
public void function05() {
System.out.println("One实现方法五");
}
}
class Two implements TestInterface{
@Override
public void function01() {
System.out.println("Two实现了方法一");
}
@Override
public void function02() {
System.out.println("Two实现了方法二");
}
@Override
public void function03() {
System.out.println("Two实现了方法三");
}
@Override
public void function04() {
System.out.println("Two实现了方法四");
}
@Override
public void function05() {
System.out.println("Two实现了方法五");
}
}
那么要如何改进,让其符合接口隔离原则呢?
首先,我们判断该接口哪些是A接口要用的方法,哪些是B接口需要的方法,哪些是他们都需要的方法。
将其拆分为三个不同的接口,让A,B分别继承公共和其所需要方法的接口
上代码:
//改进方案
//将接口拆分为三个接口
//公共方法接口
interface Common{
void function01();
}
//A所需的独立的方法
interface InterfaceA{
void function02();
void function03();
}
//B所需的独立的方法
interface InterfaceB{
void function04();
void function05();
}
//One2实现common和interfaceA接口
class One2 implements InterfaceA,Common{
@Override
public void function01() {
System.out.println("One2方法1");
}
@Override
public void function02() {
System.out.println("One2方法2");
}
@Override
public void function03() {
System.out.println("One2方法3");
}
}
//Two2实现Common和InterfaceB接口
class Two2 implements Common,InterfaceB{
@Override
public void function01() {
System.out.println("Two2方法1");
}
@Override
public void function04() {
System.out.println("Two2方法4");
}
@Override
public void function05() {
System.out.println("Two2方法5");
}
}
//A类通过接口test使用one类的方法
class A2{
public void depend01(Common test){
test.function01();
}
public void depend02(InterfaceA test){
test.function02();
}
public void depend03(InterfaceA test){
test.function03();
}
}
//A类通过接口test使用one类的方法
class B2{
public void depend01(Common test){
test.function01();
}
public void depend04(InterfaceB test){
test.function04();
}
public void depend05(InterfaceB test){
test.function05();
}
}