设计模式-依赖倒转原则

含义

  高层模块不应该依赖于低层模块,两者都应该依赖其抽象(抽象类或接口);抽象不应该依赖细节,细节应该依赖抽象。

  要求对抽象进行编程,不要对实现进行编程,降低了模块之间的耦合。

注意:

  • 每个类尽量提供接口或抽象类
  • 变量申明类型尽量是接口或抽象类
  • 任何类都不应该从具体的实现类创建

案例

 一台电脑,其内存在内存条、硬盘、CPU。现在需要模拟一下一台具体品牌电脑的组成及运行。要求其各个部件都有各自的品牌。

分析

  • 抽象出一个Computer接口,每一个具体的电脑都实现自该接口
  • 抽象出Cpu、Disk、Memory三个接口
  • 在变量申明时使用其抽象接口。

具体代码

Computer 接口

1
2
3
public interface Computer {
public void run();
}

Cpu 接口

1
2
3
4
public interface CPU {
public void run();
}

Disk 接口

1
2
3
public interface Disk {
public void run();
}

Memory 接口

1
2
3
public interface Memory {
public void run();
}

AusuComputer 实现类

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class AsusComputer implements Computer {
private CPU cpu;
private Disk disk;
private Memory memory;

public AsusComputer(CPU cpu, Disk disk, Memory memory) {
this.cpu = cpu;
this.disk = disk;
this.memory = memory;
}

public CPU getCpu() {
return cpu;
}

public void setCpu(CPU cpu) {
this.cpu = cpu;
}

public Disk getDisk() {
return disk;
}

public void setDisk(Disk disk) {
this.disk = disk;
}

public Memory getMemory() {
return memory;
}

public void setMemory(Memory memory) {
this.memory = memory;
}


@Override
public void run() {
cpu.run();
disk.run();
memory.run();
System.out.println("华硕电脑已运行");
}
}

InterCpu 实现类

1
2
3
4
5
6
public class InterCpu implements CPU{
@Override
public void run() {
System.out.println("因特尔CPU运行");
}
}

HardDisk 实现类

1
2
3
4
5
6
7
public class HardDisk implements Disk{
@Override
public void run() {
System.out.println("hard硬盘运行");
}
}

KingstonMemory 实现类

1
2
3
4
5
6
public class KingstonMemory implements Memory{
@Override
public void run() {
System.out.println("金士顿内存运行");
}
}

TestDemo 测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TestDemo {
public static void main(String[] args) {


InterCpu interCpu = new InterCpu();
KingstonMemory kingstonMemory = new KingstonMemory();
HardDisk hardDisk = new HardDisk();

Computer computer = new AsusComputer(interCpu,hardDisk,kingstonMemory);

computer.run();

}
}

1620485775924


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!