bridge pattern -- 桥接模式
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                bridge pattern -- 桥接模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                Bridge模式又稱為Handle/Body模式。
在軟件系統中,經常面臨著“某些結構復雜的對象”的創建工作,由于需求的變化,這些對象經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的接口。大部分創建型模式,就是為了解決如何向“客戶程序”隔離出“這些易變對象”,從而使得“依賴這些易變對象的客戶程序”不隨著需求的改變而改變。
實例分析 奔馳汽車的制動距離(從這個速度到完全停止所需要的距離)其他因素穩定,是隨著輪胎摩擦力不同而不同的。現在用的是米其林輪胎 1 class MichelinWheel 2 { 3 public: 4 MichelinWheel(int q,...); 5 int getLoad( ); 6 private: 7 int qulity; 8 .... 9 }; 10 MichelinWheel::MichelinWheel( int q,....) 11 :quilty(q) 12 {} 13 int MichelinWheel::getLoad( ) 14 { 15 //經過一些列因素和公式得出該輪胎的負載能力 16 ... 17 return load; 18 } 19 20 class BenzCar 21 { 22 public: 23 int getDistance( ) 24 private: 25 MichelinWheel* wheel 26 int speed 27 }; 28 BenzCar::BenzCar(MichelinWheel* w) 29 { 30 wheel=w; 31 } 32 BenzCar::getDistance ( ) 33 { 34 carSpeed=speed; 35 //經過一些列因素和公式得出汽車在某個速度的制動距離 36 ... 37 return distance 38 }那么這里我們可以看出,BenzCar這個類對MichelinWheel這個類依賴很大,因為得到的制動距離是因輪胎負載力這個參數為主要因素,那么我們一般設計類,就可以抽象化、一般化,如果某個汽車使用MichelinWheel輪胎它的制動距離和上面是一樣的。
1 class MichelinWheel 2 { 3 public: 4 MichelinWheel(int q,...); 5 int getFriction( ); 6 private: 7 int qulity; 8 .... 9 }; 10 MichelinWheel::MichelinWheel( int q,....) 11 :quilty(q) 12 {} 13 int MichelinWheel::getFriction( ) 14 { 15 //經過一些列因素和公式得出該輪胎的摩擦力 16 ... 17 return friction; 18 } 19 20 class Car 21 { 22 vritual int getDistance( )=0; 23 }; 24 25 class BenzCar:public Car 26 { 27 public: 28 int getDistance( ) 29 private: 30 MichelinWheel* wheel 31 int speed 32 }; 33 BenzCar::BenzCar(MichelinWheel* w) 34 { 35 wheel=w; 36 } 37 BenzCar::getDistance ( ) 38 { 39 carSpeed=speed; 40 //經過一些列因素和公式得出汽車在某個速度的制動距離 41 ... 42 return distance 43 }那么現在看來是汽車這個抽象類依賴MichelinWheel這個類,它的制動距離受MichelinWheel這個類的影響。那么現在實際情況是汽車不僅僅使用米其林輪胎,還使用普利司通輪胎和其它等等。如果使用普利司通輪胎,那么摩擦力計算又改變了,所以抽象化,制動距離只依賴與抽象的輪胎中的獲得摩擦力的方法了。
1 class Wheel 2 { 3 public: 4 virtual int getFriction( )=0; 5 }; 6 7 class MichelinWheel:public Wheel 8 { 9 public: 10 MichelinWheel(int q,...); 11 int getFriction( ); 12 private: 13 int qulity; 14 .... 15 }; 16 MichelinWheel::MichelinWheel( int q,....) 17 :quilty(q) 18 {} 19 int MichelinWheel::getFriction( ) 20 { 21 //經過一些列因素和公式得出該輪胎的摩擦力 22 ... 23 return friction ; 24 } 25 26 class Car 27 { 28 vritual int getDistance( )=0; 29 }; 30 31 class BenzCar:public Car 32 { 33 public: 34 int getDistance( ) 35 private: 36 Wheel* wheel 37 int speed 38 }; 39 BenzCar::BenzCar(Wheel* w) 40 { 41 wheel=w; 42 } 43 BenzCar::getDistance ( ) 44 { 45 carSpeed=speed; 46 //經過一些列因素和公式得出汽車在某個速度的制動距離 47 ... 48 return distance 49 }?
總結
以上是生活随笔為你收集整理的bridge pattern -- 桥接模式的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 获取经纬度的API
- 下一篇: PowerDesigner 16安装注意
