依赖倒转原则

依赖倒转原则

Dependence Inversion Priciple

基本介绍
  • 高层模块不应该依赖低层模块,二者都应该依赖其抽象
  • 抽象不应该依赖细节,细节应该依赖抽象
  • 依赖倒转的中心思想是面向接口编程
  • 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
  • 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成

细节

  • 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
  • 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层。利于程序扩展和优化
  • 继承时遵循里氏替换原则
1通过接口传递实现依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
}
interface ITV{
//ITV接口
public void play();
}

class Htc implements ITV{
@Override
public void play() {
System.out.println("htc电视机,打开");
}
}
//实现接口
class OpenAndClose implements IOpenAndClose{
public void open(ITV tv){
tv.play();
}
}
2.通过构造方法依赖传递
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
}
interface ITV{
//ITV接口
public void play();
}

class Htc implements ITV{
@Override
public void play() {
System.out.println("htc电视机,打开");
}
}
//实现接口
class OpenAndClose implements IOpenAndClose{
public ITV tv;
public OpenAndClose(ITV tv){
//构造器
this.tv = tv;
}
public void open(){
tv.play();
}
}
3.通过setter方法传递
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
interface IOpenAndClose{
//抽象方法
public void open(ITV tv);
public void name(ITV tv);
}
interface ITV{
//ITV接口
public void play();
}

class Htc implements ITV{
@Override
public void play() {
System.out.println("htc电视机,打开");
}
}
//实现接口
class OpenAndClose implements IOpenAndClose{
public ITV tv;
public setTv(ITV tv){
//构造器
this.tv = tv;
}
public void open(){
tv.play();
}
}