依赖倒置原则是指程序的设计要依赖于抽象(接口或抽象类),不要依赖于具体实现。这个原则要求我们使用接口或抽象类来声明变量类型、方法参数类型、方法返回值类型、对象类型等。其核心思想就是:面向接口编程,而不是面向实现类编程。
以购买食品为例,定义一个Person类:
public class Person {
public void buy(Hamburger hamburger) {
hamburger.eat();
}
}
上述Person类的buy方法表示一位顾客在购买汉堡,现在顾客又要购买薯条,我们就得修改方法的参数:
public class Person {
public void buy(Chips chips) {
chips.eat();
}
}
这种设计模式显然不符合开闭原则。同时,buy方法的参数类型是以实现类作为参数,不是以接口或者抽象类为参数,也不符合依赖倒置原则。所以我们要抽象出一个接口IDishes作为参数,汉堡类和薯条类都作为接口的实现类。
public interface IDishes {
void eat();
}
public class Person {
public void buy(IDishes iDishes) {
iDishes.eat();
}
}
这样设计就可以使我们的系统稳定的多,一般顾客要点其它食品,就可以新建个食品类即可,符合开闭原则,提高了程序的扩展性。