桥接模式通过组合将抽象与实现分离,使二者独立变化。定义Implementor接口,ConcreteImplementorA实现具体操作,抽象类持Implementor指针。

桥接模式的核心是把“抽象”和“实现”解耦,让两者可以独立变化。在C++中,通过组合而非继承来实现这种分离,通常使用指针或引用将实现部分注入到抽象类中。
先定义一个实现层的基类,提供接口供具体实现类继承。
class Implementor {
public:
virtual ~Implementor() = default;
virtual void operationImpl() = 0;
};
class ConcreteImplementorA : public Implementor {
public:
void operationImpl() override {
std::cout << "ConcreteImplementorA operation\n";
}
};
class ConcreteImplementorB : public Implementor {
public:
void operationImpl() override {
std::cout << "ConcreteImplementorB operation\n";
}
};
抽象类持有一个指向实现对象的指针,通过委托调用实际操作。
class Abstraction {
protected:
std::unique_ptr<Implementor> impl;
public:
Abstraction(std::unique_ptr<Implementor> implementation)
: impl(std::move(implementation)) {}
virtual ~Abstraction() = default;
virtual void operation() {
impl->operationImpl();
}
};
class RefinedAbstraction : public Abstraction {
public:
RefinedAbstraction(std::unique_ptr<Implementor> implementation)
: Abstraction(std::move(implementation)) {}
void operation() override {
std::cout << "RefinedAbstraction doing extra logic...\n";
impl->operationImpl();
}
};
客户端代码可以根据需要组合不同的抽象和实现。
立即学习“C++免费学习笔记(深入)”;
int main() {
// 使用不同实现配合不同抽象
auto implA = std::make_unique<ConcreteImplementorA>();
auto implB = std::make_unique<ConcreteImplementorB>();
Abstraction abstractionA(std::move(implA));
RefinedAbstraction refinedB(std::make_unique<ConcreteImplementorB>());
abstractionA.operation(); // 输出 A 的实现
refinedB.operation(); // 输出 B 的实现并带额外逻辑
return 0;
}
这种方式避免了类爆炸问题。比如有3种抽象变体和4种实现方式,传统继承需要12个子类,而桥接模式只需3 + 4 = 7个类。关键是把实现作为成员变量注入抽象类,运行时可替换,扩展性强。
基本上就这些,结构清晰,易于维护。
以上就是C++如何实现桥接模式分离抽象与实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号