DIP原则的一点理解

DIP原则的一点理解

作者:flyingtiger1974 提交日期:2005-10-19 20:26:00
  DIP依赖倒置原则,是解决层间耦合的一个方法。假设有两个层,每个层各有一个类:A和B。A在上层,B在下层。A需要用到B的方法。
  
  /*A.h*/
  
  #include "B.h"
  
  class A
  {
  public:
  void f(B* b)
  {
  b->g();
  }
  };
  
  我们经常会写这种代码。不是吗?
  现在如果B.h文件做了修改,那么类A肯定要重新编译。最主要的是,类A直接使用了类B的方法,而类B是个具体类,假设现在有一个新的类C,它也同样实现了g(),我们想改成:
  void f(C* b)
  {
  b->g();
  }
  
  可以看到,我们必须修改类A中函数f()的实现代码才能实现我们的目的。
  但并不是什么代码都能轻易修改的。所以更好的解决办法就是利用DIP原则,让类A和类B共同依赖接口g()。只要接口g()不改变,那么我们就可以很容易的用不同的实现来代替,只要它们有相同的接口即可。
  
  例如:
  /*binterface.h*/
  class binterface
  {
  public:
  virtual void g()=0;
  };
  
  /*A.h*/
  #include "binterface.h"
  
  class A
  {
  public:
  void f(binterface* b)
  {
  b->g();
  }
  };
  
  现在A只依赖binterface了,只要类B和类C都实现了这个接口,那么我们就可以灵活的在类A中使用,同时不用修改类A的代码!
  还有个问题,现在抽取出接口,那么这个接口从逻辑上讲到底是属于上层还是下层?(这可能会影响到文件的物理位置和包的接口)
  根据专家的讲法,这个接口仍然属于下层,并不是我们会以为的上层。这个接口可以看成下层提供的一个Facade。实际的依赖关系仍然是上层依赖下层(物理依赖关系),我认为这跟DIP原则(逻辑依赖关系)并不矛盾。

转载于:https://www.cnblogs.com/dyc988/archive/2008/05/30/1210632.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值