C++ 设计模式 依赖倒置原则 简单示例
C++ 设计模式 依赖倒置原则 简单示例
/** * 依赖倒置原则(Dependency Inversion Principle) * 依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。 * */ #include <iostream> class HardDisk { public: virtual void work() = 0; virtual ~HardDisk() {} }; class Memory { public: virtual void work() = 0; virtual ~Memory() {} }; class CPU { public: virtual void work() = 0; virtual ~CPU() {} }; 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: virtual void work() override { std::cout << "我是Inter CPU 我工作良好" << std::endl; } }; class AMDCPU: public CPU { public: virtual void work() override { std::cout << "我是AMD CPU 我工作良好" << std::endl; } }; class KingstomMemory: public Memory { public: virtual void work() override { std::cout << "我是Kingstom Memory 我工作良好" << std::endl; } }; class SamsungMemory: public Memory { public: virtual void work() override { std::cout << "我是Samsung Memory 我工作良好" << std::endl; } }; class WDHardDisk: public HardDisk { public: virtual void work() override { std::cout << "我是WD HardDisk 我工作良好" << std::endl; } }; class STHardDisk: public HardDisk { public: virtual void work() override { std::cout << "我是ST HardDisk 我工作良好" << std::endl; } }; void DIP_test() { HardDisk * harddisk = nullptr; Memory * memory = nullptr; CPU * cpu = nullptr; Computer * mycomputer = nullptr; harddisk = new WDHardDisk; memory = new KingstomMemory; cpu = new InterCPU; std::cout << "---------->>>" << std::endl; mycomputer = new Computer(harddisk, memory, cpu); mycomputer->work(); delete mycomputer; mycomputer = nullptr; delete cpu; cpu = nullptr; delete memory; memory = nullptr; delete harddisk; harddisk = nullptr; std::cout << "<<<----------" << std::endl; harddisk = new STHardDisk; memory = new SamsungMemory; cpu = new AMDCPU; std::cout << "---------->>>" << std::endl; mycomputer = new Computer(harddisk, memory, cpu); mycomputer->work(); delete mycomputer; mycomputer = nullptr; delete cpu; cpu = nullptr; delete memory; memory = nullptr; delete harddisk; harddisk = nullptr; std::cout << "<<<----------" << std::endl; return; } int main() { DIP_test(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南