依赖倒置的本质是让高层模块依赖抽象而非具体实现。就像老板只关心"岗位职能"而非"具体员工",代码中Boss类只需对接口FileSender有依赖,无需知道是小王、小李还是AI助手在执行任务,大幅提升系统灵活性。
【代码演示】
#include <iostream>#include <memory>// 📄 接口:职位要求class FileSender {public: virtual void sendFile(const std::string& file) = 0; virtual ~FileSender() = default;};// 👨💼 老板:只依赖接口,不依赖具体员工class Boss { std::unique_ptr<FileSender> employee;public: Boss(std::unique_ptr<FileSender> emp) : employee(std::move(emp)) {} void requestFileSend(const std::string& file) { std::cout << "老板:请发送文件 " << file << "\n"; employee->sendFile(file); // 只知道职位要求 }};// 👨💻 具体员工1:小王class XiaoWang : public FileSender {public: void sendFile(const std::string& file) override { std::cout << "小王:通过邮件发送 " << file << "\n"; }};// 👩💻 具体员工2:小李 class XiaoLi : public FileSender {public: void sendFile(const std::string& file) override { std::cout << "小李:通过微信发送 " << file << "\n"; }};// 🤖 新员工:AI助手class AIAssistant : public FileSender {public: void sendFile(const std::string& file) override { std::cout << "AI:通过云服务发送 " << file << "\n"; }};int main() { std::cout << "=== 依赖倒置:老板不依赖具体员工 ===\n"; // 老板可以轻松切换不同员工 Boss boss1(std::make_unique<XiaoWang>()); boss1.requestFileSend("报告.doc"); Boss boss2(std::make_unique<XiaoLi>()); boss2.requestFileSend("报表.xls"); Boss boss3(std::make_unique<AIAssistant>()); boss3.requestFileSend("数据.pdf"); std::cout << "小王离职?没关系!老板继续工作!\n";}