说明
接口隔离原则(Interface Segregation Principle:ISP)意思是:使用多个专门的接口比使用单一的总接口要好。换句话说,从一个客户类的角度来讲,一个类对另一个类的依赖性应该建立在最小的接口上,客户端不应该被迫依赖于它不使用的方法。
示例
示例:没有遵守接口隔离原则
类图:
源码:
接口SafetyDoor:
package com.team.isp.before;
public interface SafetyDoor {
public void waterProof();
public void fireProof();
public void theftProof();
}
类ThbSafteDoor:
package com.team.isp.before;
public class ThbSafteDoor implements SafetyDoor {
@Override
public void waterProof() {
System.out.println("防水");
}
@Override
public void fireProof() {
System.out.println("防火");
}
@Override
public void theftProof() {
System.out.println("防盗");
}
}
测试类Test:
package com.team.isp.before;
public class Test {
public static void main(String[] args) {
ThbSafteDoor safeDoor = new ThbSafteDoor();
safeDoor.waterProof();
safeDoor.fireProof();
safeDoor.theftProof();
}
}
运行结果:
对上面案例的改进
类图:
下面给出源码:
接口WaterProof:
package com.team.isp.after;
public interface WaterProof {
public void waterProof();
}
接口FireProof:
package com.team.isp.after;
public interface FireProof {
public void fireProof();
}
接口TheftProof:
package com.team.isp.after;
public interface TheftProof {
public void theftProof();
}
类ThbSafteDoor,实现了3个接口:
package com.team.isp.after;
public class ThbSafteDoor implements WaterProof, FireProof, TheftProof {
@Override
public void theftProof() {
System.out.println("thb 防盗");
}
@Override
public void fireProof() {
System.out.println("thb 防火");
}
@Override
public void waterProof() {
System.out.println("thb 防水");
}
}
类TaoShengSafteDoor,实现了1个接口:
package com.team.isp.after;
public class TaoShengSafteDoor implements TheftProof {
@Override
public void theftProof() {
System.out.print("taosheng 防盗");
}
}
测试类Test:
package com.team.isp.after;
public class Test {
public static void main(String[] args) {
ThbSafteDoor thbSafteDoor = new ThbSafteDoor();
thbSafteDoor.waterProof();
thbSafteDoor.fireProof();
thbSafteDoor.theftProof();
System.out.println("------------------------------------");
TaoShengSafteDoor taoShengSafteDoor = new TaoShengSafteDoor();
taoShengSafteDoor.theftProof();
}
}
运行结果: