掌握C++桥接模式:实现抽象与实现的分离
需积分: 16 124 浏览量
更新于2024-11-20
收藏 3KB 7Z 举报
资源摘要信息:"C++设计模式-结构型模式-桥接模式"
桥接模式(Bridge Pattern)是23种常用的设计模式之一,属于结构型模式。它主要用于将抽象化与实现化解耦,使得二者可以独立地变化。在桥接模式中,抽象化部分与实现部分可以分别独立地扩展,而不会影响到对方。
### 桥接模式的关键概念:
- **抽象部分**:通常是指一个拥有实现部分引用的接口。它对高层来说是透明的,但封装了实现部分的具体行为。
- **实现部分**:是一个拥有多种具体实现的接口,这些实现可以独立于抽象化部分而变化。
- **具体抽象部分**:是对抽象部分的实现,它持有实现部分的引用。
- **具体实现部分**:是实现部分接口的具体实现,它独立于抽象部分的其它实现。
### 桥接模式的结构:
1. **Abstraction**:定义抽象部分的接口,维护一个Implementor类型的对象,用于定义所使用的具体实现对象的类型。
2. **RefinedAbstraction**:扩展Abstraction,改变和扩展抽象部分的行为。
3. **Implementor**:定义实现部分的接口,但不具体实现,由ConcreteImplementor来完成。
4. **ConcreteImplementor**:具体实现Implementor接口,实现具体的操作。
### C++实现桥接模式的示例代码:
```cpp
#include <iostream>
// Implementor
class DrawingAPI {
public:
virtual void drawCircle(float x, float y, float radius) = 0;
};
// ConcreteImplementorA
class DrawingAPI1 : public DrawingAPI {
public:
void drawCircle(float x, float y, float radius) override {
std::cout << "API1.circle at " << x << ',' << y << " radius " << radius << std::endl;
}
};
// ConcreteImplementorB
class DrawingAPI2 : public DrawingAPI {
public:
void drawCircle(float x, float y, float radius) override {
std::cout << "API2.circle at " << x << ',' << y << " radius " << radius << std::endl;
}
};
// Abstraction
class Shape {
protected:
DrawingAPI* drawingAPI;
public:
Shape(DrawingAPI* drawingAPI) {
this->drawingAPI = drawingAPI;
}
virtual void draw() = 0;
virtual void resizeByPercentage(float percentage) = 0;
};
// RefinedAbstraction
class CircleShape : public Shape {
private:
float x, y, radius;
public:
CircleShape(float x, float y, float radius, DrawingAPI* drawingAPI)
: Shape(drawingAPI), x(x), y(y), radius(radius) {}
void draw() override {
drawingAPI->drawCircle(x, y, radius);
}
void resizeByPercentage(float percentage) override {
radius *= percentage;
}
};
int main() {
Shape* shape1 = new CircleShape(1, 2, 3, new DrawingAPI1());
shape1->draw();
shape1->resizeByPercentage(0.5f);
delete shape1;
Shape* shape2 = new CircleShape(3, 4, 5, new DrawingAPI2());
shape2->draw();
shape2->resizeByPercentage(2.0f);
delete shape2;
return 0;
}
```
### 桥接模式的适用场景:
- 当一个抽象可能有多个实现,这些实现可以独立变化时。
- 当抽象的实现应该独立于抽象的接口变化时。
- 当抽象和其实现的继承层次结构应该独立扩展时。
### 桥接模式的优点:
- 分离抽象与实现,降低它们之间的耦合度。
- 提高系统的可扩展性。
- 实现细节对客户透明。
### 桥接模式的缺点:
- 桥接模式增加了系统的复杂度,可能需要理解两个类层次结构。
### 桥接模式与其他设计模式的关联:
- **适配器模式**(Adapter)通常用于转换接口,而桥接模式是用于将抽象与实现分离。
- **策略模式**(Strategy)允许在运行时改变对象的行为,桥接模式则是对抽象和实现进行解耦,使它们可以独立变化。
在软件工程中,桥接模式的应用广泛,尤其是在需要解耦抽象与实现的场景下。通过分离接口与实现,我们可以独立地对抽象层和实现层进行扩展,从而提供更多的灵活性。这种模式特别适用于那些抽象和实现之间需要独立变化的系统架构设计。
2012-11-20 上传
2018-09-16 上传
2021-07-16 上传
2014-06-22 上传
2020-09-04 上传
2024-09-19 上传
2020-08-27 上传
2011-10-27 上传
2018-09-01 上传
繁星璀璨G
- 粉丝: 3944
- 资源: 28
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践