接口隔离原则(Interface Segregation Principle, ISP)是指多用多个指定的接口,而不是使用单一的总接口。客户端不应该依赖它不需要的接口。这个原则应当让我们设计接口时注意一下几点
1.一个类对一个类的依赖应该建立在最小的接口上
2.建立单一的接口,不要建立臃肿庞大的接口
3.尽量细化接口,接口中的方法尽量少(也不是越少越好,适度即可)
接口隔离原则复合我们常说的高内聚低耦合的设计思想,从而使类具有很好的可读性,可扩展性,可维护性。设计接口时要考虑业务模型,还有一些可能会有变更的地方,所以对于抽象,业务模型的理解是非常重要的。下面举个例子,写一个动物行为的抽象:
IAnimal接口:
public interface IAnimal {
void eat();
void fly();
void swim();
}
Bird类实现:
public class Bird implements IAnimal{
@Override
public void eat() { }
@Override
public void fly() { }
@Override
public void swim() { }
}
Dog类实现:
public class Dog implements IAnimal{
@Override
public void eat() { }
@Override
public void fly() { }
@Override
public void swim() { }
}
从上面的例子我们可以看到,Bird根本不会swim()只能空着,Dog类也不会fly(),它们都要重写不需要的方法。接下来细化接口,针对不同的动物行为来设计接口,分别设计IEatAnimal、IFlyAnimal、ISwimAnimal接口,来看代码:
IEatAnimal接口:
public interface IEatAnimal {
void eat();
}
IFlyAnimal接口:
public interface IFlyAnimal {
void fly();
}
ISwimAnimal接口:
public interface ISwimAnimal {
void swim();
}
Bird类只实现IEatAnimal和IFlyAnimal接口:
public class Bird implements IEatAnimal,IFlyAnimal{
@Override
public void eat() { }
@Override
public void fly() { }
}
Dog类只实现IEatAnimal和ISwimAnimal接口:
public class Dog implements IEatAnimal,ISwimAnimal{
@Override
public void eat() { }
@Override
public void swim() { }
}
来看两者的类图比较,还是非常清晰明了的:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68423.html