设计模式-Bridge模式戏说

本文介绍了一种设计模式——桥接模式,并通过一个具体的代码示例进行了解释。该模式通过将抽象与其实现分离来提高系统的灵活性,允许两者独立变化。文章展示了如何使用桥接模式来实现图形绘制接口,使得不同的绘制API可以被统一使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式-Bridge模式戏说

 

     实现此模式具备两种抽象类,1。界面(客户接口,使用者接口)类,2。执行类,通过在界面类中包含执行类的指针,界面类即可调用执行类的函数。

 

这种调用方式,大师们称之为“抽象和它的实现部分”分离。

 

为应对将来的变更,在界面类和执行类的接口要保留余地。

 

 

http://zh.wikipedia.org/zh-cn/%E6%A9%8B%E6%8E%A5%E6%A8%A1%E5%BC%8F

 

 

#include <iostream>

using namespace std;

/* Implementor*/
class DrawingAPI {
public:
    virtual void drawCircle(double x, double y, double radius) = 0;
    virtual ~DrawingAPI() {}
};

/* Concrete ImplementorA*/
class DrawingAPI1 : public DrawingAPI {
public:
    void drawCircle(double x, double y, double radius) {
        cout << "API1.circle at " << x << ':' << y << ' ' << radius << endl;
    }
};

/* Concrete ImplementorB*/
class DrawingAPI2 : public DrawingAPI {
public:
    void drawCircle(double x, double y, double radius) {
        cout << "API2.circle at " << x << ':' << y << ' ' <<  radius << endl;
    }
};

/* Abstraction*/
class Shape {
public:
    virtual ~Shape() {}
    virtual void draw() = 0;
    virtual void resizeByPercentage(double pct) = 0;
};

/* Refined Abstraction*/
class CircleShape : public Shape {
public:
    CircleShape(double x, double y,double radius, DrawingAPI *drawingAPI) :
      m_x(x), m_y(y), m_radius(radius), m_drawingAPI(drawingAPI)
      {}
      void draw() {
          m_drawingAPI->drawCircle(m_x, m_y, m_radius);
      }
      void resizeByPercentage(double pct) {
          m_radius *= pct;
      }
private:
    double m_x, m_y, m_radius;
    DrawingAPI *m_drawingAPI;
};

int main(void) {
    DrawingAPI1 dap1;
    DrawingAPI2 dap2;
    CircleShape circle1(1,2,3,&dap2);
    CircleShape circle2(5,7,11,&dap1);
    circle1.resizeByPercentage(2.5);
    circle2.resizeByPercentage(2.5);
    circle1.draw();
    circle2.draw();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值