c++桥接模式
可以简记为pointer to implement:”指向实现的指针”。
[DP]书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。考虑装操作系统,有多种配置的计算机,同样也有多款操作系统。如何运用桥接模式呢?可以将操作系统和计算机分别抽象出来,让它们各自发展,减少它们的耦合度。当然了,两者之间有标准的接口。这样设计,不论是对于计算机,还是操作系统都是非常有利的。下面给出这种设计的UML图,其实就是桥接模式的UML图。
#include <bits/stdc++.h> using namespace std; #define debug(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl class COS { public: COS() {cout << "OS()" << endl;} virtual ~COS() {cout << "~OS()" << endl;} virtual void Run(){} }; class CLinuxOS : public COS { public: CLinuxOS() {cout << "CLinuxOS()" << endl;} ~CLinuxOS() {cout << "~CLinuxOS()" << endl;} void Run(){cout << "LinuxOS run()" << endl;} }; class CUnixOS : public COS { public: CUnixOS() {cout << "CUnixOS()" << endl;} ~CUnixOS() {cout << "~CUnixOS()" << endl;} void Run(){cout << "CUnixOS run()" << endl;} }; class CComputer { public: CComputer() {cout << "CComputer()" << endl;} virtual ~CComputer() {cout << "~CComputer()" << endl;} virtual void InstallOS(COS *os){} }; class CIBMComputer : public CComputer { public: CIBMComputer() {cout << "CIBMComputer()" << endl;} ~CIBMComputer() {cout << "~CIBMComputer()" << endl;} void InstallOS(COS *os){ os->Run();} }; class CHPComputer : public CComputer { public: CHPComputer() {cout << "CHPComputer()" << endl;} ~CHPComputer() {cout << "~CHPComputer()" << endl;} void InstallOS(COS *os){ os->Run();} }; int main(int argc, char *argv[]) { COS *os = new CLinuxOS(); CComputer *cmptr = new CIBMComputer(); cmptr->InstallOS(os); delete cmptr; cmptr = NULL; delete os; os = NULL; return 0; }
第二个示例:

#ifndef SOLUTION_H #define SOLUTION_H struct CImplement; class CAbstractSample { public: CAbstractSample(); virtual ~CAbstractSample(); void abstractDo(); private: CImplement *m_impl; }; #endif // SOLUTION_H

#include "solution.h" #include <iostream> using namespace std; struct CImplement{ void doSomething(){ cout << "CImplement doSomething()" << endl; } }; CAbstractSample::CAbstractSample():m_impl(new CImplement) { cout << "CAbstractSample()" << endl; } CAbstractSample::~CAbstractSample() { if(m_impl != NULL) { delete m_impl; m_impl = NULL; } cout << "~CAbstractSample()" << endl; } void CAbstractSample::abstractDo(){ m_impl->doSomething(); }
#include "solution.h" #include <iostream> using namespace std; struct CImplement{ void doSomething(){ cout << "CImplement doSomething()" << endl; } }; CAbstractSample::CAbstractSample():m_impl(new CImplement) { cout << "CAbstractSample()" << endl; } CAbstractSample::~CAbstractSample() { if(m_impl != NULL) { delete m_impl; m_impl = NULL; } cout << "~CAbstractSample()" << endl; } void CAbstractSample::abstractDo(){ m_impl->doSomething(); } int main(int argc, char *argv[]) { CAbstractSample *as = new CAbstractSample(); as->abstractDo(); delete as; as = NULL; return 0; }
$ g++ -g -Wall -std=c++0x solution.cpp main.cpp -o xmain
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2015-11-20 开机启动与禁止