zoukankan      html  css  js  c++  java
  • 结构型模式 桥接模式

    结构型模式 桥接模式

    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;
    }
  • 相关阅读:
    新浪微博热门话题(30 分)(字符串)
    新浪微博热门话题(30 分)(字符串)
    任务调度的合理性 (25)拓扑排序
    任务调度的合理性 (25)拓扑排序
    PTA 银行排队问题之单队列多窗口服务(25 分)
    PTA 银行排队问题之单队列多窗口服务(25 分)
    PTA 畅通工程之最低成本建设问题(30 分)(最小生成树 krusal)
    PTA 畅通工程之最低成本建设问题(30 分)(最小生成树 krusal)
    PTA 最大子列和问题(10 分)
    PTA 是否同一棵二叉搜索树(25 分)
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7778894.html
Copyright © 2011-2022 走看看