依赖倒转原则:依赖于抽象类(接口类),不依赖于具体实现类
即:高层业务逻辑依赖抽象类,具体实现类 依赖于抽象业务逻辑
高层逻辑为:软件设计具体需求(eg:制造一台电脑)
抽象层为:很多抽象类(eg:电脑由CPU,显卡,硬盘,内存条等组成,此部分为抽象类)
具体实现类:实现高层逻辑的业务类(eg:具体的CPU,,显卡,硬盘,内存条等)
#include<iostream>
using namespace std;
//抽象类
class Cpu
{
public:
virtual void doSomeThing() = 0;
};
class Memory
{
public:
virtual void doSomeThing() = 0;
};
class HardDisk
{
public:
virtual void doSomeThing() = 0;
};
class ShowCard
{
public:
virtual void doSomeThing() = 0;
};
//具体实现类
class InterCpu : public Cpu
{
public:
void doSomeThing()
{
cout << "我是inter制造的14nmCPU" << endl;
}
};
class SeagateHardDisk :public HardDisk
{
public:
void doSomeThing()
{
cout << "我是希捷制造的1T硬盘" << endl;
}
};
class KingstonMemory :public Memory
{
public:
void doSomeThing()
{
cout << "我是金士顿制造DDR4_16G运存" << endl;
}
};
class GTX960ShowCard :public ShowCard
{
void doSomeThing()
{
cout << "我是GTX960显卡" << endl;
}
};
//高层业务逻辑
class computer
{
public:
computer(Cpu *cpu, Memory *mem, HardDisk *hd, ShowCard *sc)
{
this->_cpu = cpu;
this->_mem = mem;
this->_hd = hd;
this->_sc = sc;
}
void work()
{
this->_cpu->doSomeThing();
this->_mem->doSomeThing();
this->_hd->doSomeThing();
this->_sc->doSomeThing();
}
private:
Cpu *_cpu = NULL;
Memory *_mem = NULL;
HardDisk *_hd = NULL;
ShowCard *_sc = NULL;
};
int main()
{
Cpu *cpu1 = new InterCpu;
Memory *mem1 = new KingstonMemory;
HardDisk *hd1 = new SeagateHardDisk;
ShowCard *sc1 = new GTX960ShowCard;
computer * com = new computer(cpu1, mem1, hd1, sc1);
com->work();
return 0;
}
只要将 多个抽象类 定义好,即不管 哪个 具体的 功能实现模块 只要继承抽象类并重写虚函数实现具体功能,即可以 实现高层逻辑