前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式——桥接模式

设计模式——桥接模式

作者头像
程序员的园
发布2024-07-18 13:36:53
140
发布2024-07-18 13:36:53
举报
文章被收录于专栏:程序员的园——原创文章

桥接模式(Bridge Pattern),作为结构型设计模式的一种,桥接模式的核心精髓在于解耦两个乃至多个维度的变化(本文仅以两个维度为例),确保各个维度能够独立演化,互不干扰。它构筑了一道横跨各个维度的桥梁,促进各维度顺畅交互的同时,保持各自的独立边界。

应用背景

桥接模式着重适用于多维度变化的系统,如图形编辑器开发这类功能,用户需求多变,要求形状与颜色组合灵活。传统做法易导致类爆炸,维护成本陡增。桥接模式适时介入,通过精妙设计,有效应对此类扩展性难题。形如下图:

结构

上文提到桥接模式的核心精髓在于解耦两个乃至多个维度的变化,故此其必存在两个或多个不同的维度;每个维度有自己的接口层和实现层

  • 维度1抽象:定义了维度1抽象接口,并内含对维度2的引用,作为沟通的桥梁。如上图中的Shape类
  • 维度2抽象:定义了维度2抽象接口,如上图中的Color类
  • 维度1实现:实现维度1接口,承载实际操作逻辑。如上图中的Circle和Square类
  • 维度2实现:实现维度2接口,承载实际操作逻辑。如上图中的Green和Gray类

代码实现

借助桥接模式书写上述的图形编辑器开发功能,具体代码如下:

代码语言:javascript
复制
// 定义颜色接口
class Color {
public:
    virtual ~Color() {}
    virtual void applyColor() const = 0;
};

// 定义具体颜色类
class Green : public Color {
public:
    void applyColor() const override {
        std::cout << "Applying green color." << std::endl;
    }
};

class Gray : public Color {
public:
    void applyColor() const override {
        std::cout << "Applying gray color." << std::endl;
    }
};

//定义形状接口类
class Shape {
protected:
    Color* color;
public:
    Shape(Color* c) : color(c) {}
    virtual ~Shape() {}
    virtual void draw() const = 0;
    void setColor(Color* c) { color = c; }
};

//定义具体形状类
class Circle : public Shape {
public:
    Circle(Color* c) : Shape(c) {}
    void draw() const override {
        std::cout << "Drawing a circle.";
        color->applyColor();
    }
};

class Square : public Shape {
public:
    Square(Color* c) : Shape(c) {}
    void draw() const override {
        std::cout << "Drawing a square.";
        color->applyColor();
    }
};

//测试代码
int test_bridge() {
    auto* gray = new Gray();
    auto* green = new Green();

    Shape* circle = new Circle(gray);
    Shape* square = new Square(green);

    circle->draw(); // 输出:Drawing a circle. Applying gray color.
    square->draw(); // 输出:Drawing a square. Applying green color.

    // 动态改变颜色
    circle->setColor(green);
    square->setColor(gray);

    circle->draw(); // 输出:Drawing a circle. Applying green color.
    square->draw(); // 输出:Drawing a square. Applying gray color.

    delete circle;
    delete square;
    delete green;
    delete gray;

    return 0;
}

总结

桥接模式通过将各个维度分离,赋予了软件设计更高的灵活性和扩展性。它不仅减少了类的数量,简化了系统结构,还促进了代码的重用,提升了系统的维护性和可测试性。掌握桥接模式,无疑是我们C++开发者手中的一把利器,助我们在编程征途中游刃有余,创造出更加健壮和灵活的软件架构。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档