• 结构型模式 桥接模式


    结构型模式 桥接模式

    Client
            Bridge模式的使用者
    Abstraction
            抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用
    Refined Abstraction
            Abstraction子类
    Implementor
            行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)
    ConcreteImplementor
            Implementor子类

    适用于:
            桥接模式(Bridge Pattern)是将抽象部分与实际部分分离(解耦合),使它们都可以独立的变化。

    /**
     * 结构型模式 桥接模式
     * Bridge 模式又叫做桥接模式,是构造型的设计模式之一。
     * Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。
     * 它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。不太常用的一种设计模式。
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    
    class Engine
    {
    public:
         // 引擎安装
        virtual void installEngine() = 0;
        virtual ~Engine() {}
    };
    
    class Engine4000: public Engine
    {
    public:
        virtual void installEngine() override
        {
            std::cout << "引擎安装 Engine4000" << std::endl;
        }
    };
    
    class Engine3500: public Engine
    {
    public:
        virtual void installEngine() override
        {
            std::cout << "引擎安装 Engine3500" << std::endl;
        }
    };
    
    class Car
    {
    public:
        Car(Engine *pEngine)
        {
            m_engine = pEngine;
        }
        // 车安装引擎
        virtual void installEngine() = 0;
    
    protected:
        Engine *m_engine; // 此变量是保护属性,不是私有属性
    };
    
    class BMW7: public Car
    {
    public:
        BMW7(Engine *pEngine): Car(pEngine) // 调用父类的构造函数
        {
    
        }
        // 注意: 车安装引擎 和 引擎安装 的不同之处
        virtual void installEngine() override // 车安装引擎
        {
            std::cout << "BMW7" << std::endl;
            // 使用父类的 保护变量(m_engine) 类型(Engine *)
            m_engine->installEngine(); // 引擎安装
        }
    };
    
    
    void mytest()
    {
        Engine4000 *e4000 = new Engine4000();
        BMW7 *bmw7 = new BMW7(e4000);
        bmw7->installEngine();
    
        delete bmw7;
        bmw7 = nullptr;
        delete e4000;
        e4000 = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    C++三大特性之多态
    内向者沟通圣经:4P法(Preparation,Presence,Push,Practice)
    RTP/RTCP、TCP、UDP、RTMP、RTSP
    网络七层协议
    预防U盘被病毒侵害的方法
    Win8安装程序出现2502、2503错误解决方法
    小L的区间求和
    【剑指offer-12】矩阵中的路径
    【剑指offer】数值的整数次方
    【剑指offer】二进制中1的个数
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7778894.html
Copyright © 2020-2023  润新知