依赖倒置原则 - Dependence Inversion Principle - DIP

定义:

  • 高层模块不应该以来低层模块,两个都应该依赖抽象
  • 抽象不应该依赖细节,细节应该依赖抽象

核心思想:针对接口编程,不要对实现编程

使用时,应遵循以下3点

  1. 低层模块或高层模块尽量都要有抽象类,或者两者都有
  2. 变量的声明类型尽量是抽象类
  3. 使用继承时遵循里式替换原则

举例:语文老师教语文可以有多种途径,如课堂上面对面、在线视频等

教学方式接口,所有的教学方式实现该接口

#include <string>

class TeachWay
{
public:
	TeachWay();
	virtual ~TeachWay();

	virtual std::string getWay() = 0;   // 获取方式
};

老师教学函数,针对教学接口编程,与真正的教学方式解耦

// 定义
virtual void teach(TeachWay *way);

// 实现
void Teacher::teach(TeachWay *way)
{
	std::cout << "I teache a course " +  way->getWay() << std::endl;
}

课程上教学,继承TeachWay, 并实现getWay()函数

std::string TeachClass::getWay()
{
	return "in class";
}

在线教学,继承TeachWay, 并实现getWay()函数

std::string TeachOnline::getWay()
{
	return "online";
}

客户端

#include "Teacher.h"
#include "TeachClass.h"
#include "TeachOnline.h"

int main(int agrc, char* argv[])
{
	// 创建教学方式
	TeachClass tc; 
	TeachOnline to;

	// 创建老师
	Teacher th;

	// 老师通过不同的方式教学
	th.teach(&tc);
	th.teach(&to);

	getchar();
	return 0;
}

运行结果
在这里插入图片描述
源码地址

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页