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() {
    }
}

此篇完。

posted @ 2021-11-08 21:14  田园码民  阅读(96)  评论(0)    收藏  举报