结构型模式 桥接模式

结构型模式 桥接模式

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;
}
原文地址:https://www.cnblogs.com/lsgxeva/p/7778894.html