【设计模式】依赖反转

本文通过手机充电器的例子,深入浅出地介绍了依赖反转原则的概念及其应用。解释了如何通过抽象接口来降低类间的耦合度,使代码更易于扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直说依赖反转,但是没明白是不太清晰什么是依赖反转。

最近看了 《敏捷软件开发:原则、模式与实践》这本书中说的依赖反转,结合自己的常写的代码,有一点新的见解。
 
以咱们常见的手机充电器为例:
    比如我有Nokia X2手机(nokia出品的安卓机,本人手机这块比较节省),手机正常来说需要依赖手机充电器来进行充电。
    我的Nokia手机用的就是Nokia配套的充电器。
1 class NokiaPhone{
2  private NokiaCharger charger;
3  
4  public void charge(){
5   charger.charge()
6  }
7 }

 

    如果类设计成这样呢,NokiaPhone 强依赖的是 NokiaCharger , 而NokiaCharger不依赖任何类【1】。
    为什么呢?因为NokiaPhone类里面充电器的类型是NokiaCharger已经强制写死了。
 
  但是我们发现,其它Android手机只要是Mini Usb接口的充电器,我的Nokia手机都能用它来充电。
    如果我们的NokiaPhone类设计中充电器类型还是NokiaCharger的话,则不能满足需求。
 
    我们这时候修改一下 NokiaPhone的设计。    
class NokiaPhone{
 private MiniUSBCharger charger;
 
 public void charge(){
  charger.charge()
 }
}
 
interface MiniUSBCharger{
 void charge();
}
    我们发现,这是 NokiaPhone 强依赖的是 MiniUSBCharger。而 NokiaCharger需要实现 MiniUSBCharger接口,因此NokiaCharger强依赖MiniUSBPhone【2】。 
 
综合【1】与【2】来看,我们可以看到,NokiaPhone的强依赖无论是NokiaCharger还是MiniUSBCharger都是强依赖,这不变。
而实现了 NokiaCharger从什么都不依赖,到依赖MiniUSBCharger的反转【反转的结论】。
 
结论:很简单,当依赖一个具体类的时候,想想是不是应该抽象一个满足当前需求的接口出来,然后依赖该接口。
这样有利于后面的扩展,而扩展只需要满足你按照需求设计的接口。

转载于:https://www.cnblogs.com/xiongluo/p/5887222.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值