设计模式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要小很多,结构也会更加清晰。

posted @   丛林小阁楼  阅读(202)  评论(0编辑  收藏  举报
编辑推荐:
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示