首页 > 其他分享 >结构型模式-桥接模式

结构型模式-桥接模式

时间:2023-11-10 12:14:47浏览次数:27  
标签:桥接 模式 Color Shape 抽象 部分 结构型

1 什么是桥接模式

桥接模式(Bridge Pattern)是一种用于将抽象部分与它的实现部分分离的设计模式,使它们可以独立地变化。桥接模式通过组合而不是继承的方式来实现两个或多个独立变化的维度,从而减少类之间的耦合性。
在桥接模式中,存在两种角色:抽象部分(Abstraction)和实现部分(Implementor)。抽象部分定义了高层次的抽象接口,而实现部分则定义了具体实现的接口。通过将抽象部分和实现部分分离,可以使它们可以独立地扩展和变化。

2 举个例子

以下是一个简单的桥接模式示例:假设我们要设计一个绘制图形的系统,其中可以绘制不同颜色的图形(如圆形、矩形等)。我们使用桥接模式来分离形状和颜色,让它们可以独立地变化。
首先,我们定义抽象部分Shape和实现部分Color:

// 抽象部分
class Shape {
public:
    virtual void draw() = 0;
};

// 实现部分
class Color {
public:
    virtual std::string fill() = 0;
};

然后,我们创建具体的图形(如圆形、矩形)和颜色(如红色、绿色):

// 具体图形实现
class Circle : public Shape {
public:
    Circle(Color* color) : color(color) {}

    void draw() {
        std::cout << "Drawing Circle with color " << color->fill() << std::endl;
    }

private:
    Color* color;
};

class Rectangle : public Shape {
public:
    Rectangle(Color* color) : color(color) {}

    void draw() {
        std::cout << "Drawing Rectangle with color " << color->fill() << std::endl;
    }

private:
    Color* color;
};

// 具体颜色实现
class Red : public Color {
public:
    std::string fill() {
        return "Red";
    }
};

class Green : public Color {
public:
    std::string fill() {
        return "Green";
    }
};

客户端代码可以这样使用桥接模式:

int main() {
    Color* red = new Red();
    Color* green = new Green();

    Shape* circle = new Circle(red);
    Shape* rectangle = new Rectangle(green);

    circle->draw();
    rectangle->draw();

    delete red;
    delete green;
    delete circle;
    delete rectangle;

    return 0;
}

在上面的例子中,Shape 类代表图形,Color 类代表颜色。Circle 和 Rectangle 是具体的图形类,它们通过组合不同的颜色实现;Red 和 Green 是具体的颜色类。通过桥接模式,我们实现了图形和颜色之间的解耦,使它们可以独立地变化和扩展。

3 总结

通过桥接模式,我们避免了多继承的复杂性,并将抽象部分和实现部分分离,提高了系统的灵活性和可扩展性。

标签:桥接,模式,Color,Shape,抽象,部分,结构型
From: https://www.cnblogs.com/luoxiang/p/17823797.html

相关文章

  • Go 设计模式中中介者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) 中介者模式原理详细解释:中介者模式(MediatorPattern)是一种行为型设计模式,用于降低多个对象之间的直接通信,并使......
  • Go 设计模式中观察者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)          观察者模式原理详细解释:观察者模式(ObserverPattern)是一种行为型设计模式,它定义了......
  • 行为模式-责任链模式
    1什么是责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,用于建立一个对象链,每个对象都有机会处理请求。请求沿着对象链传递,直到有一个对象能够处理它为止。这样,责任链模式将请求的发送者和接收者解耦,动态确定处理请求的对象。在责任链模式中,通常有两种......
  • 结构型模式-享元模式
    1什么是享元模式享元模式(FlyweightPattern)是一种以共享对象来减少内存使用和提高性能的设计模式。在享元模式中,通过共享尽可能多的相似对象来减少系统中对象的数量。这样可以节省内存和减少对象的创建和销毁所带来的开销。享元模式的核心思想是将对象分为两个部分:内部状态(Intr......
  • 解锁设计模式的神秘面纱:编写无懈可击的代码之单例设计模式
    前言单例设计模式是23种设计模式中最常用的设计模式之一,无论是三方类库还是日常开发几乎都有单例设计模式的影子。单例设计模式提供了一种在多线程情况下保证实例唯一性的解决方案。单例设计模式虽然简单,但是实现方案却非常多,大体上有以下7种最常见的方式。饿汉模式所谓饿汉式,就是......
  • 工厂方法模式
    [实验任务]:加密算法目前常用的加密算法有DES(DataEncryptionStandard)和IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。 publicinterfaceEncryption{Stringencrypt(Stringtext);Stringdecrypt(Stringciph......
  • python升级到3.12版本, 开发模式安装包, 在vscode下Pylance无法解析的问题处理
    问题描述在python3.11版本下开发python库,为方便调测,使用开发模式安装包.使用如下命令:pipinstall-e.其中-e参数表示开发模式下安装python包,它并没有把包相关文件拷贝到site-packages目录,而是创建一个链接指向当前的开发库.这样,当自己开发的包修改后会立即生效,......
  • Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍
    Go接口:Go中最强大的魔法,接口应用模式或惯例介绍目录Go接口:Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1一切皆组合2.2垂直组合2.2.1第一种:通过嵌入接口构建接口2.2.2第二种:通过嵌入接口构建结构体类型2.2.3第三种:通过嵌入结构体类型构建新结构......
  • flutter 运行的四种模式
    Debug(调试)模式1、这是开发Flutter应用程序时最常用的模式。可以在真机和模拟器上同时运行。重要用于开发和调试阶段。2、可以进行热重载,即在不重新启动应用程序的情况下实时更新代码。3、应用程序会包含用于调试和开发的额外信息和工具(debugging信息、debuggeraids(比如......
  • Kubernetes日志采集Sidecar模式介绍
    Kubernetes(K8S)作为CNCF(cloudnativecomputingfoundation)的一个核心项目,背靠Google和Redhat的强大社区,近两年发展十分迅速,在成为容器编排领域中领导者的同时,也正在朝着PAAS底座标配的方向发展。日志采集方式日志作为任一系统不可或缺的部分,在K8S的官方文档中也介绍了多种的日......