SOLID原则之依赖倒转

面向对象编程的一个重大功能就是“继承”,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

从“继承”的特点来看,继承的作用之一,就是可以使派生类无差别的使用基类的方法,以实现逻辑的重用。

但从虚函数,尤其是纯虚函数来看,“继承”的作用更多的在于“逻辑的分层”,以实现模块间的松耦合。

举个例子,如:

class Logger

{

public:

virtual void LOG(char * info) = 0;


}


void func(Logger logger)

{

// do something

logger.LOG("func exit.");

}


对于classLogger而言,其有一个纯虚函数LOG(我们将其定义为记录日志的功能逻辑),另外一个函数func在退出时调用了LOG方法,记录函数退出。

为什么会这样去实现?

在实际的项目中,代码架构往往分不同的模块/层次,对于基于Base开发的模块/系统,可能有不同的日志格式诉求。

按照传统的思想,如果基于Logger的系统有不同的诉求,那么就提供不同的LOG方法不就行了?

这样的想法,往往是灾难性的。实际运作过程中的极端情况下,Logger类的系统往往在一个团队中维护,而基于Logger开发的系统可能在另一个团队、甚至另外的企业。如果按照传统的思想,两个团队之间的“耦合”就产生了。

这个时候,“继承”就派上用场了,基于Logger开发的系统,完全可以重写自己的日志函数:


class NewLogger : public Logger

{

public:

void LOG(char * info) 

{

// ...

}

}


在调用func函数时,只需要如下调用即可:

NewLogger newLogger;

func(newLogger);


“分层”的思想作为计算机体系中解决问题的一种最常用思路,OOP中的继承从一定程度上讲正是迎合该思想而产生的,而SOLID原则中的“依赖倒转原则”正是通过“继承”来支撑的。




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值