桥接模式
目的:将抽象与实现相分离。
定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化。
(抽象与实现分离是指让每种实现的变化不会影响到其他实现,从而打到应对变化的目的)
代码如下:
#include <list>
#include <iostream>
#include <string>
using namespace std;
/*实现*/
class Implementor{
public:
virtual void Operation()=0;
};
/*具体实现*/
class ImplementorA:public Implementor{
public:
void Operation()
{
cout<<"windows 版本"<<endl;
}
};
class ImplementorB:public Implementor{
public:
void Operation()
{
cout<<"linux 版本"<<endl;
}
};
/*抽象*/
class Abstraction{
protected:
/*之所以先构建实现类正是由于抽象必须实现对实现的通信*/
Implementor * Base;
public:
virtual void Operation()=0;
};
/*
被提炼的抽象
作用:当具体实现的时候接收具体实现的基类指针,建立起类间通信
*/
class RefinedAbstractionA:public Abstraction{
public:
RefinedAbstractionA(Implementor *t)
{
this->Base=t;
}
void SetOS(Implementor *t)
{
this->Base=t;
}
void Operation()
{
cout<<"dota:";
Base->Operation();
}
};
class RefinedAbstractionB:public Abstraction{
public:
RefinedAbstractionB(Implementor *t)
{
this->Base=t;
}
void SetOS(Implementor *t)
{
this->Base=t;
}
void Operation()
{
cout<<"LOL:";
Base->Operation();
}
};
int main(void)
{
Implementor *windows = new ImplementorA();
Implementor *linux = new ImplementorB();
RefinedAbstractionA *dota = new RefinedAbstractionA(windows);
dota->Operation();
dota->SetOS(linux);
dota->Operation();
RefinedAbstractionB *lol = new RefinedAbstractionB(windows);
lol->Operation();
lol->SetOS(linux);
lol->Operation();
return 0;
}
实现系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让他们独立变化,减少它们之间的耦合——大话设计模式
何时使用桥接模式:
在发现我们不得不多角度去分类实现对象,也就是不同操作系统之间的软件存在不同的实现,我们必须解决兼容问题,在这个时候大量的继承会造成大量的类增加,违背了开闭原则。
问:在本次代码中如果我们需要开发新的软件怎么办?
答:只用在Abstrction里添加派生类就可以了,然后在建立类间通信。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异