<<设计模式之禅(第二版)>>——第三章 依赖倒置原则

定义:
  • 模块之间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的
  • 接口或抽象类不依赖于实现类
  • 实现类依赖接口或者抽象类
  • 面向接口编程
实例:
<<设计模式之禅(第二版)>>——第三章 依赖倒置原则_第1张图片
简单实例
code    
public class Client {
public static void main(String[] args) {
    IDriver zhangsan = new Driver();
    ICar car = new Car();
    zhangsan.drive(car);
 }
}

public interface ICar {
 public void run();
}


public interface IDriver {
 public void drive(ICar car);
}

public class Driver implements IDriver {
 @Override
 public void drive(ICar car) {
    // TODO Auto-generated method stub
    System.out.println("实体司机,开车");
    car.run();
 }

}

public class Car implements ICar {

@Override
public void run() {
    // TODO Auto-generated method stub
    System.out.println("实体汽车类,run");
 }

}

result:
实体司机,开车
实体汽车类,run
ps:案例中的zhangsan 表面类型是IDriver,实际类型是Driver
依赖的三种写法:
  • 构造函数注入,构造函数传递以来对象。(指的是实现接口的实体类中的构造函数的前置参数为另一个接口)
  • Setter方法传递以来对象
  • 接口声明依赖对象(接口注入)
实践原则:
  • 每个类尽量都有接口和抽象类,或者抽象类和接口两者都具备
  • 变量的表面类型尽量使接口或者是抽象类
  • 任何类都不应该从具体类中派生
  • 尽量不要覆写基类的方法
  • 结合里氏替换原则使用(接口负责定义public属性和方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化。)

你可能感兴趣的:(<<设计模式之禅(第二版)>>——第三章 依赖倒置原则)