C++ 设计模式 依赖倒置原则 简单示例

本文通过C++代码示例介绍了依赖倒置原则(Dependency Inversion Principle, DIP),该原则提倡依赖于抽象而非具体实现。示例中创建了计算机组件的抽象类,并通过继承实现不同品牌的具体组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值