標籤:style blog http color io os 使用 2014 div
當物體有幾種不同的屬性時,這時類的繼承就會變的多樣。
例如,一款手機按類型可分為功能機和智能機,按顏色可分為黑色、白色、紅色等,按品牌可分為蘋果、三星、小米等。
當屬性越多,則需要建立的類就更多,使用橋接模式能夠大大降低問題的複雜性,並且能夠極大程度降低耦合。
範例程式碼:
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 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要小很多,結構也會更加清晰。
設計模式4——橋接模式