接口隔离原则(Interface Segregation Principle,ISP)
原创大约 2 分钟
接口隔离原则(Interface Segregation Principle,ISP)的意思是将庞大臃肿的接口拆分成为更小的和更具体的接口
,这样客户将只会知道他们感兴趣的方法,那些他们用不着的方法自然就被屏蔽掉了。
package com.itechthink.designrule.divide;
/**
* 人类的行为
*
*/
public class Human implements IAnimal {
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void run() {
System.out.println("跑步");
}
}
上面的Human
类实现了IAnimal
接口中的三个方法。但如果现在客户只关心run()
方法,那他也不得不被迫去实现另外的两个无关的方法eat()
和sleep()
。
所以,接口隔离原则的建议是这么做。
package com.itechthink.designrule.divide;
/**
* 吃饭接口
*
*/
public interface IAnimalEat {
void eat();
}
/**
* 睡觉接口
*
*/
public interface IAnimalSleep {
void sleep();
}
/**
* 跑步接口
*
*/
public interface IAnimalRun {
void run();
}
/**
* 接口隔离原则是指用多个专门的接口,而不是单一的总接口
* 建立单一的接口,而不是庞大臃肿的接口,尽量细化接口,接口中的方法应该尽量少(也不是越少越好,适度)
*
*/
public class People implements IAnimalEat, IAnimalSleep, IAnimalRun {
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void run() {
System.out.println("跑步");
}
}
现在,将原来单一的IAnimal
接口拆分成了三个功能接口IAnimalEat
、IAnimalSleep
和IAnimalRun
,需要什么功能就实现什么接口,排除不相关的职责
。
这就是接口隔离原则所阐述的意思。
感谢支持
更多内容,请移步《超级个体》。