当物体有几种不同的属性时,这时类的继承就会变的多样。
例如,一款手机按类型可分为功能机和智能机,按颜色可分为黑色、白色、红色等,按品牌可分为苹果、三星、小米等。
当属性越多,则需要创建的类就更多,使用桥接模式能够大大降低问题的复杂性,并且能够极大程度降低耦合。
示例代码:
Bridge.h内容
1 #ifndef Bridge_H_H 2 #define Bridge_H_H 3 4 #include5 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 Color16 {17 public:18 virtual void display() { cout << "Color is White!" << endl; }19 };20 21 class ColorBlack : public Color22 {23 public:24 virtual void display() { cout << "Color is Black!" << endl; };25 };26 27 class Phone28 {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 Phone41 {42 public:43 virtual void display(){44 cout << "Type is Functional! ";45 Phone::display();46 }47 };48 49 class IntelligentPhone : public Phone50 {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要小很多,结构也会更加清晰。