设计模式4——桥接模式
当物体有几种不同的属性时,这时类的继承就会变的多样。
例如,一款手机按类型可分为功能机和智能机,按颜色可分为黑色、白色、红色等,按品牌可分为苹果、三星、小米等。
当属性越多,则需要创建的类就更多,使用桥接模式能够大大降低问题的复杂性,并且能够极大程度降低耦合。
示例代码:
Bridge.h内容
1 #ifndef Bridge_H_H 2 #define Bridge_H_H 3 4 #include <iostream> 5 using namespace std; 6 7 class Color 8 { 9 public: 10 Color() {} 11 virtual ~Color() {} 12 virtual void display() = 0; 13 }; 14 15 class ColorWhite : public Color 16 { 17 public: 18 virtual void display() { cout << "Color is White!" << endl; } 19 }; 20 21 class ColorBlack : public Color 22 { 23 public: 24 virtual void display() { cout << "Color is Black!" << endl; }; 25 }; 26 27 class Phone 28 { 29 public: 30 Phone() : color(NULL) {} 31 virtual ~Phone() {} 32 virtual void display() { color->display(); } 33 void setColor(Color *color0){ 34 color = color0; 35 } 36 private: 37 Color *color; 38 }; 39 40 class FunctionalPhone : public Phone 41 { 42 public: 43 virtual void display(){ 44 cout << "Type is Functional! "; 45 Phone::display(); 46 } 47 }; 48 49 class IntelligentPhone : public Phone 50 { 51 public: 52 virtual void display(){ 53 cout << "Type is Intelligient! "; 54 Phone::display(); 55 } 56 }; 57 58 void BridgeTest() 59 { 60 Color *color1 = new ColorWhite(); 61 Color *color2 = new ColorBlack(); 62 63 Phone *phone1 = new FunctionalPhone(); 64 Phone *phone2 = new IntelligentPhone(); 65 66 phone1->setColor(color1); 67 phone1->display(); 68 phone1->setColor(color2); 69 phone1->display(); 70 71 phone2->setColor(color1); 72 phone2->display(); 73 phone2->setColor(color2); 74 phone2->display(); 75 } 76 77 #endif
运行结果:
所设计的颜色和类型分别只有两个,优势体现不明显,当每种类型继承较多时,优势将会很明显。
假如类型和颜色分别有5种和7种,则5+7比5*7要小很多,结构也会更加清晰。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!