今天的博客主题
设计原则和模式 --》设计原则之接口隔离原则
接口隔离原则 ISP (Interface Segregation Principle)
客户端不应该依赖它不需要的接口。
使用多个专门的接口比使用单一的总接口要好。
一个类对另一个类的依赖性应当建立在最小的接口上。
细化接口,接口中的方法尽量少(适度即可)
接口的隔离原则符合我们常说的高内聚低耦合的设计思想,从而使得类具有很好的可读性、可扩展性和可维护性。
在设计接口的时候,要多去思考,考虑业务模型,以及在以后需求变更的位置做一些预判。
所以对于抽象,对业务模型的理解是非常重要的。
代码示例:
新建一个动物接口
public interface IAnimal {
void eat();
void fly();
void swim();
}
鸟实现动物接口
public class BirdImpl implements IAnimal{
public void eat() {
System.out.println("鸟吃食物");
}
public void fly() {
System.out.println("鸟会飞");
}
public void swim() {
System.out.println("鸟不能游泳");
}
}
狗实现动物接口
public class DogImpl implements IAnimal{
public void eat() {
System.out.println("狗吃食物");
}
public void fly() {
System.out.println("狗不会飞");
}
public void swim() {
System.out.println("狗会游泳");
}
}
通过上面代码可以看出动物类的 swim() 方法对 鸟实现类是不可用的,只能空着。
动物类的 fly() 方法对狗实现类是不可用的,只能空着。
那这个时候,就适当的来设计接口。不同的属性实现不同的接口
public interface IAnimalEat {
void eat();
}
public interface IAnimalFly {
void fly();
}
public interface IAnimalSwim {
void swim();
}
鸟实现接口
public class Bird implements IAnimalEat,IAnimalFly{
public void eat() {
System.out.println("鸟吃食物");
}
public void fly() {
System.out.println("鸟会飞");
}
}
狗实现接口
public class Dog implements IAnimalEat,IAnimalSwim{
public void eat() {
System.out.println("狗吃食物");
}
public void swim() {
System.out.println("狗会游泳");
}
}
接口拆开之后,现在看实现类没有多余方法,都是自身拥有的特性能用到的。
最终类图,通过类图也能比较直观的看出来