05 依赖倒置原则

官方定义:

依赖倒置原则(Dependence Inversion Principle,DIP)是指在设计代码架构
时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依
赖于细节,细节应该依赖于抽象。

通俗解释

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

场景示例

在这里插入图片描述
希捷硬盘类(XiJieHardDisk):

public class XiJieHardDisk implements HardDisk {
public void save(String data) {
System.out.println("使用希捷硬盘存储数据" + data);
}
public String get() {
System.out.println("使用希捷希捷硬盘取数据");
return "数据";
}
}

Intel处理器(IntelCpu):

public class IntelCpu implements Cpu {
	public void run() {
		System.out.println("使用Intel处理器");
	}
}

金士顿内存条(KingstonMemory):

public class KingstonMemory implements Memory {
	public void save() {
		System.out.println("使用金士顿作为内存条");
	}
}

电脑(Computer):

public class Computer {
private XiJieHardDisk hardDisk;
private IntelCpu cpu;
private KingstonMemory memory;
public IntelCpu getCpu() {
return cpu;
}
public void setCpu(IntelCpu cpu) {
this.cpu = cpu;
}
public KingstonMemory getMemory() {
return memory;
}
public void setMemory(KingstonMemory memory) {
this.memory = memory;
}
public XiJieHardDisk getHardDisk() {
return hardDisk;
}
public void setHardDisk(XiJieHardDisk hardDisk) {
this.hardDisk = hardDisk;
}
public void run() {
System.out.println("计算机工作");
cpu.run();
memory.save();
String data = hardDisk.get();
System.out.println("从硬盘中获取的数据为:" + data);
}
}

测试类(TestComputer):用来组装电脑

public class TestComputer {
public static void main(String[] args) {
Computer computer = new Computer();
computer.setHardDisk(new XiJieHardDisk());
computer.setCpu(new IntelCpu());
computer.setMemory(new KingstonMemory());
computer.run();
}
}

上面代码可以看到已经组装了一台电脑,但是似乎组装的电脑的cpu只能是Intel
的,内存条只能是金士顿的,硬盘只能是希捷的,这对用户肯定是不友好的,
用户有了机箱肯定是想按照自己的喜好,选择自己喜欢的配件。

根据依赖倒转原则进行改进:

代码我们需要修改Computer类,让Computer类依赖抽象(各个配件的接
口),而不是依赖于各个组件具体的实现类。
在这里插入图片描述

public class Computer {
private HardDisk hardDisk;
private Cpu cpu;
private Memory memory;
//getter/setter......
public void run() {
System.out.println("计算机工作");
}
}

关于依赖倒置、依赖注入、控制反转这三者之间的区别与联系?

1 ) 依赖倒置原则
在这里插入图片描述
2 ) 控制反转
在这里插入图片描述
3 ) 依赖注入
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值