zoukankan      html  css  js  c++  java
  • 桥接模式(C++)

    介绍

    桥接模式: 将抽象部分和实现部分分离,使它们可以独立变换. 属于结构型模式.

    目的: 在有多种可能变化情况下,使用继承可能会造成类爆炸的问题,扩展起来不灵活.

    使用场景:

    • 当一个对象具有多个变化因素时,考虑依赖于抽象的实现,而不是具体实现;
    • 当多个变化因素在多个对象之间共享时,考虑将这部分的变化部分抽象出来,再聚合/集成进去.
    • 当一个对象的多个变化因素可以动态变化时.

    优点:

    • 抽象实现分离;
    • 优秀的扩展能力;
    • 实现细节对客户透明.

    缺点:

    • 会增加系统的设计难度理解难度

    接口耦合,而不是实现耦合.

    整个关键就是组合的使用. 当有多维度变化时,可以考虑使用桥接模式.

    UML

    image

    示例

    #include <iostream>
    
    //抽象接口
    class App {
    public:
        virtual ~App() {}
        virtual void Run() = 0;
    };
    
    //具体实现类
    class ChatApp : public App {
    public:
        void Run() override {
            std::cout << "--------CharApp-----" << std::endl;
        }
    };
    
    //具体实现类
    class GameApp : public App {
    public:
        void Run() override {
            std::cout << "---------GameApp-----" << std::endl;
        }
    };
    
    //抽象电脑接口
    class Computer {
    public:
        virtual ~Computer() {}
        //实现与App的桥接
        virtual void RunApp(App* app) = 0;
    };
    
    //具体的电脑实现类
    class DellPC : public Computer {
    public:
        void RunApp(App* app) {
            std::cout << "------DellPC------" << std::endl;
            app->Run();
        }
    };
    
    //具体的电脑实现类
    class LenovePC: public Computer {
    public:
        void RunApp(App* app) {
            std::cout << "------lenovePC-----" << std::endl;
            app->Run();
        }
    };
    
    int main() {
        ChatApp chat_app;
        App *chat_app = new ChatApp();
        App *game_app = new GameApp();
        Computer *dell_pc = new DellPC();
        Computer *lenove_pc = new LenovePC();
        dell_pc->RunApp(chat_app);
        dell_pc->RunApp(game_app);
        lenove_pc->RunApp(chat_app);
        lenove_pc->RunApp(game_app);
        
        delete chat_app;
        delete game_app;
        delete dell_pc;
        delete lenove_pc;
        return 0;
    }
    

    适配器模式和桥接模式的区别?

    主要是使用场景不同:

    • 适配器模式主要解决两个已有接口之间的匹配问题;
    • 桥接模式是分离抽象和实现,使两者接口可以不同.
  • 相关阅读:
    Encrypted Handshake Message
    RSAParameters Struct
    What if JWT is stolen?
    What's the difference between JWTs and Bearer Token?
    RSA Algorithm Example
    第18届Jolt大奖结果公布
    Ruby on rails开发从头来(windows)(三十六) 调试技巧
    Ruby on rails开发从头来(四十二) ActiveRecord基础(主键和ID)
    YouTube开放基础技术架构 让用户建自家YouTube
    Ruby on rails开发从头来(四十) ActiveRecord基础(Boolean属性)
  • 原文地址:https://www.cnblogs.com/xl2432/p/13139757.html
Copyright © 2011-2022 走看看