大话设计模式之桥接模式

桥接模式是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们可以独立地变化。这种模式通过提供一个桥接接口来实现这种分离,使得抽象部分和实现部分可以在运行时独立地进行修改。

桥接模式主要由两个部分组成:抽象部分和实现部分。

  • 抽象部分(Abstraction):定义了抽象类或接口,并包含一个对实现部分的引用。
  • 实现部分(Implementor):定义了实现类或接口,与抽象部分相互配合,完成功能。
#include <iostream>

// 实现部分接口
class Implementor {
public:
    virtual void operationImpl() const = 0;
};

// 具体实现部分A
class ConcreteImplementorA : public Implementor {
public:
    void operationImpl() const override {
        std::cout << "Concrete Implementor A operation" << std::endl;
    }
};

// 具体实现部分B
class ConcreteImplementorB : public Implementor {
public:
    void operationImpl() const override {
        std::cout << "Concrete Implementor B operation" << std::endl;
    }
};

// 抽象部分
class Abstraction {
protected:
    Implementor* implementor_;

public:
    Abstraction(Implementor* implementor) : implementor_(implementor) {}

    virtual void operation() const = 0;
};

// 具体抽象部分
class RefinedAbstraction : public Abstraction {
public:
    RefinedAbstraction(Implementor* implementor) : Abstraction(implementor) {}

    void operation() const override {
        std::cout << "Refined Abstraction operation" << std::endl;
        implementor_->operationImpl();
    }
};

int main() {
    // 创建具体实现部分对象
    ConcreteImplementorA implementorA;
    ConcreteImplementorB implementorB;

    // 使用不同的实现部分创建具体抽象部分对象
    RefinedAbstraction abstractionA(&implementorA);
    RefinedAbstraction abstractionB(&implementorB);

    // 调用抽象部分的操作方法
    abstractionA.operation();
    abstractionB.operation();

    return 0;
}

/*
在这个示例中,Implementor 是实现部分的接口,定义了实现部分的操作方法。
ConcreteImplementorA 和 ConcreteImplementorB 是具体实现部分,
分别实现了 Implementor 接口。Abstraction 是抽象部分的接口,包含一个对实现部分的引用。
RefinedAbstraction 是具体抽象部分,实现了抽象部分的操作方法,并调用了实现部分的方法。

在 main() 函数中,我们创建了具体的实现部分对象和抽象部分对象,并调用了抽象部分的操作方法,
实现了桥接模式的功能。
*/

觉得有帮助的话,打赏一下呗。。

           

相关推荐

  1. 【前端设计模式模式

    2024-04-14 02:20:06       67 阅读
  2. 设计模式模式

    2024-04-14 02:20:06       42 阅读
  3. 6、设计模式模式

    2024-04-14 02:20:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 02:20:06       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 02:20:06       97 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 02:20:06       78 阅读
  4. Python语言-面向对象

    2024-04-14 02:20:06       88 阅读

热门阅读

  1. 爬虫ip被限制了怎么解决

    2024-04-14 02:20:06       32 阅读
  2. MVC设计模式的思想

    2024-04-14 02:20:06       33 阅读
  3. Unity3D 立方体纹理与自制天空盒详解

    2024-04-14 02:20:06       39 阅读
  4. Go语言中工作负载类型对并发的影响

    2024-04-14 02:20:06       32 阅读
  5. 分库分表-简单了解

    2024-04-14 02:20:06       29 阅读
  6. 电子邮件协议学习

    2024-04-14 02:20:06       35 阅读
  7. Unity DOTS1.0 入门(1) ECS机制与概述

    2024-04-14 02:20:06       33 阅读
  8. 网络工程师练习题(13)

    2024-04-14 02:20:06       35 阅读
  9. Redis GEO实现附近的人功能

    2024-04-14 02:20:06       38 阅读
  10. MySQL基础练习题:习题31-End

    2024-04-14 02:20:06       28 阅读
  11. 服务器停用,备份服务文件。

    2024-04-14 02:20:06       25 阅读
  12. Gitea的简单介绍

    2024-04-14 02:20:06       38 阅读