依赖颠倒原则
关于多态的实现原理以及实例见前几天更新的C++多态一文:
C++多态
使用依赖颠倒原则之后,虽然代码实现比原来更加复杂了,但是实现了高层业务逻辑层与底层模块之间的解耦合,更改或者更换底层模块不在需要改动高层模块的代码就可以实现,整个系统的更加的稳定。
传统的过程式设计倾向于使用高层的模块依赖低层次的模块,抽象层依赖于具体层
没有使用依赖颠倒之前,上层业务逻辑依赖底层业务逻辑

依赖颠倒原则
使用了依赖颠倒之后,上层业务逻辑和底层模块都依赖于抽象层,代码复杂了,但是系统易于维护了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sKc9bte-1602069982108)(picture/image-20201007185357740.png)]](https://i-blog.csdnimg.cn/blog_migrate/4f599ef12c421b29368a445fbc9f8534.png#pic_center)
依赖颠倒的实现也是基于多态的基础之上,,具体的Cpp代码实现如下:
#include <iostream>
using namespace std;
// 让computer框架和具体的厂商 进行解耦合
// 1. 定义虚类,主要目的是为了规定后期子类的行为
class HardDisk
{
public:
virtual void work(void) = 0;
};
class Memory
{
public:
virtual void work(void) = 0;
};
class Cpu
{
public:
virtual void work(void) = 0;
};
class Computer
{
public:
Computer(HardDisk *hardDisk, Memory *memory, Cpu *cpu)
{
m_hardDisk = hardDisk;
m_memory = memory;
m_cpu = cpu;
}
void work()
{
m_hardDisk->work();
m_memory->work();
m_cpu->work();
}
private:
HardDisk *m_hardDisk;
Memory *m_memory;
Cpu *m_cpu;
};
class InterCpu : public Cpu
{
public:
void work(void)
{
cout << "inter cpu work status ok." << endl;
}
};
class XSDisk : public HardDisk
{
public:
void work(void)
{
cout << "xs data work status ok." << endl;
}
};
class KingStonMemory : public Memory
{
public:
void work(void)
{
cout << "KingSton memory status is ok." << endl;
}
};
int main(int argc, char const *argv[])
{
// 基于多态实现依赖颠倒
HardDisk *hardDisk = NULL;
Memory *memory = NULL;
Cpu *cpu = NULL;
hardDisk = new XSDisk;
memory = new KingStonMemory;
cpu = new InterCpu;
Computer *myComputer = new Computer(hardDisk, memory, cpu);
myComputer->work();
delete myComputer;
delete cpu;
delete memory;
delete hardDisk;
cout << "hello world." << endl;
return 0;
}
执行结果:
xs data work status ok.
KingSton memory status is ok.
inter cpu work status ok.
hello world.
本文探讨了依赖颠倒原则如何通过C++多态提高模块间解耦,以计算机硬件组件为例,展示了如何实现实例并提升系统稳定性。通过虚函数和多态,高层逻辑独立于底层实现,只需修改抽象层即可适应变化。
527





