引言: 多款安装了手机游戏和通讯录软件的不同种手机,怎去抽象出它的实现形式呢?有2种思路可循:
(1) 按品牌抽象 手机品牌-->手机品牌X-->带有软件Y的手机品牌X
(2)按软件抽象 手机软件-->手机软件Y--> 在手机品牌X上运行的手机软件Y
由于实现的方式有多种,而且先抽象谁效率高不清楚(因为品牌和软件都很多,很难知道谁多谁少),这时,增加品牌或软件都需要增加很多类的开销,Bridge模式正好能很好地解决此问题。
Bridge模式(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
问题:你都让它独立变化了,那还怎么让它们产生关系?之前已经说过,类与类的关系,可以通过继承、包含或内嵌指针(引用)。这里可以运用第三种,通过带指针的形参使他们聚合。
实例:
View Code
1 #include <iostream> 2 using namespace std; 3 4 //**********手机软件线路************************ 5 class CHandsetSoft 6 { 7 public: 8 virtual void Run() = 0; 9 }; 10 11 //手机游戏 12 class CHandsetGame :public CHandsetSoft 13 { 14 public: 15 virtual void Run() 16 { 17 cout<<"Running the HandsetGame..."<<endl; 18 } 19 }; 20 21 //通讯录 22 class CHandsetAddressList :public CHandsetSoft 23 { 24 public: 25 virtual void Run() 26 { 27 cout<<"Running the HandsetAddressList..."<<endl; 28 } 29 }; 30 31 //***********手机品牌*********************** 32 class CHandsetBrand 33 { 34 public: 35 virtual SetHandsetSoft(CHandsetSoft *pHandsetSoft) = 0; 36 }; 37 38 //手机M品牌 39 class CHandsetBrandM :public CHandsetBrand 40 { 41 public: 42 virtual SetHandsetSoft(CHandsetSoft *pHandsetSoft) 43 { 44 cout<<"HandsetBrandM was "; 45 pHandsetSoft->Run(); 46 } 47 }; 48 49 //手机N品牌 50 class CHandsetBrandN :public CHandsetBrand 51 { 52 public: 53 virtual SetHandsetSoft(CHandsetSoft *pHandsetSoft) 54 { 55 cout<<"HandsetBrandN was "; 56 pHandsetSoft->Run(); 57 } 58 }; 59 60 //客户端 61 int main(int argc, char* argv[]) 62 { 63 CHandsetGame HandsetGameObj; 64 CHandsetAddressList HandsetAddressListObj; 65 66 CHandsetBrand *pHandsetBrandM = new CHandsetBrandM; 67 pHandsetBrandM->SetHandsetSoft(&HandsetGameObj); 68 pHandsetBrandM->SetHandsetSoft(&HandsetAddressListObj); 69 70 CHandsetBrand *pHandsetBrandN = new CHandsetBrandN; 71 pHandsetBrandN->SetHandsetSoft(&HandsetGameObj); 72 pHandsetBrandN->SetHandsetSoft(&HandsetAddressListObj); 73 74 delete pHandsetBrandM; 75 delete pHandsetBrandN; 76 77 return 0; 78 }
小结: 这里运用了合成聚合原则,而这也是推荐的原则,通过形参实现这一原则。
优点: (1)降低了沿着两个或多个维度扩展时的复杂度,防止类的过度膨胀。
(2)解除了两个或多个维度之间的耦合,使它们沿着各自方向变化而不互相影响。
我喜欢一无所有,这样就只能一步一步的创造世界...


浙公网安备 33010602011771号