zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    CF-819B. Mister B and PR Shifts(模拟,找规律)
    CF-1198E. Rectangle Painting 2(最小点覆盖)
    CF-1214D. Treasure Island(dfs,最小割)
    CF-546E. Soldier and Traveling(网络最大流)
    洛谷 P1351 [NOIP2014 提高组] 联合权值(dp)
    CF-286C. Main Sequence(贪心,模拟)
    java基本框架
    人脸识别算法(—)
    将“引用”作为函数参数有哪些特点
    什么是“引用”?申明和使用“引用”要注意哪些问题?
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7773009.html
Copyright © 2011-2022 走看看