设计模式值六大原则——依赖倒置原则(DIP)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计模式值六⼤原则——依赖倒置原则(DIP)依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义:
⾼层模块不应该依赖底层模块,两者都应该依赖其抽象;
抽象不应该依赖细节;
细节应该依赖抽象。

依赖倒置原则在Java语⾔中的表现是:
模块间的依赖通过抽象发⽣,实现类之间不发⽣直接的依赖关系,其依赖关系是通过接⼝或者抽象类产⽣的;
接⼝或抽象类不依赖于实现类;
实现类依赖接⼝或抽象类。

依赖倒置原则实际上就是要求“⾯向接⼝编程”。

采⽤依赖倒置原则可以减少类间的耦合性,提⾼系统的稳定性,降低并⾏开发引起的风险,提⾼代码的可读性和可维护性。

例:
司机接⼝
1 2 3 4 5public interface IDriver {
public void driver(ICar car); }
司机实现类
1 2 3 4 5 6 7public class Driver implements IDriver { public void driver(ICar car) {
car.run();
}
}
汽车接⼝
1 2 3 4 5public interface ICar { public void run(); }
汽车实现类
1 2 3 4 5 6 7public class Benz implements ICar {
public void run() {
System.out.println("奔驰汽车开始运⾏..."); }
}
1 2 3 4public class BMW implements ICar {
public void run() {
System.out.println("宝马汽车开始运⾏...");
5 6 7 } }
场景类
1 2 3 4 5 6 7 8 9 10 11 12public class Client {
/**
* @param args
*/
public static void main(String[] args) { IDriver zhangSan = new Driver(); ICar benz = new Benz();
zhangSan.driver(benz);
}
}
抽象是对实现的约束,对依赖者⽽⾔,也是⼀种契约,不仅仅约束⾃⼰,还同时约束⾃⼰与外部的关系,其⽬的是保证所有的细节不脱离契约的范畴,确保约束双⽅按照既定的契约(抽象)共同发展,只要抽象这根基线在,细节就脱离不了这个圈圈,始终让你的对象做到“⾔必信,⾏必果”。

依赖的三种写法
只要做到抽象依赖,即使是多层的依赖传递也⽆所谓惧!
构造函数传递依赖对象——构造函数注⼊
1 2 3 4 5 6 7 8 9 10 11 12 13public class Driver implements IDriver {
private ICar car;
public Driver(ICar _car) {
this.car = _car;
}
public void driver() {
this.car.run();
}
}
Setter⽅法传递依赖对象——Setter依赖注⼊
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16public class Driver implements IDriver { private ICar car;
/**
* @param car the car to set
*/
public void setCar(ICar car) {
this.car = car;
}
public void driver() {
this.car.run();
}
}
接⼝声明依赖对象——接⼝注⼊
1
2 3 4 5 6 7public class Driver implements IDriver { public void driver(ICar car) {
car.run();
}
}
本质:
依赖倒置原则的本质就是通过抽象(接⼝或者抽象类)使各个类或模型的实现彼此独⽴,不互相影响,实现模块间的松耦合。

规则:
每个类尽量都有接⼝或抽象类,或者抽象类和接⼝两者都具备;
变量的表⾯类型尽量是接⼝或者抽象类;
任何类都不应该从具体类派⽣;
尽量不要覆写基类的⽅法;
结合⾥⽒替换原则使⽤。

接⼝负责定义public属性和⽅法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当的时候对⽗类进⾏细化。

依赖倒置与依赖正置
依赖正置就是类间的依赖是实实在在的实现类间的依赖,也就是⾯向实现编程,这也是正常⼈的思维⽅式,我要开奔驰车就依赖奔驰车,我要使⽤笔记本电脑就直接依赖笔记本电脑,⽽编写程序需要的是对现实世界的事物进⾏抽象,抽象的结构就是有了抽象类和接⼝,然后我们根据系统设计的需要产⽣了抽象间的依赖,代替了⼈们传统思维中的事物间的依赖,“倒置”就是从这⾥产⽣的。

相关文档
最新文档