00_4面向对象设计原则-接口隔离原则
接口隔离原则:指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。这个原则指导我们在设计接口时,应当注意以下几点:
(1)一个类对另一个类的依赖应该建立在最小接口上。
(2)建立单一接口,不是建立庞大臃肿的接口。
(3)尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)。
下面我们来个实例:
IAniaml.java
package org.test.design.principle.isp; public interface IAniaml { //吃 void eat(); //飞 void fly(); //游泳 void swim(); }
Bird.java
package org.test.design.principle.isp; public class Bird implements IAniaml{ @Override public void eat() { } @Override public void fly() { } @Override public void swim() { } }
Dog.java
package org.test.design.principle.isp; public class Dog implements IAniaml{ @Override public void eat() { } @Override public void fly() { } @Override public void swim() { } }
来我们分析上面的代码,Bird类的swim()方法只能空着,Dog类的fly()方法显然是不可能的。这时候,我们针对不同动物的行为来设计不同的接口,分别设计IEatAnimal、IFlyAnimal和ISwimAnimal接口。
IEatAnimal.java
package org.test.design.principle.isp; public interface IEatAnimal { //吃 void eat(); }
IFlyAnimal.java
package org.test.design.principle.isp; public interface IFlyAnimal { //飞 void fly(); }
ISwimAnimal.java
package org.test.design.principle.isp; public interface ISwimAnimal { //游泳 void swim(); }
DogV2.java
package org.test.design.principle.isp; public class DogV2 implements ISwimAnimal,IEatAnimal{ @Override public void eat() { } @Override public void swim() { } }
BirdV2.java
package org.test.design.principle.isp; public class BirdV2 implements IEatAnimal,IFlyAnimal{ @Override public void eat() { } @Override public void fly() { } }
此篇完。