Bridge模式又称为Handle/Body模式。

在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。大部分创建型模式,就是为了解决如何向“客户程序”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求的改变而改变。

实例分析
奔驰汽车的制动距离(从这个速度到完全停止所需要的距离)其他因素稳定,是随着轮胎摩擦力不同而不同的。现在用的是米其林轮胎
1class MichelinWheel 2{ 3public: 4 MichelinWheel(int q,...); 5int getLoad( ); 6private: 7int qulity; 8 .... 9};10 MichelinWheel::MichelinWheel( int q,....)11:quilty(q)12{}13int MichelinWheel::getLoad( )14{15//经过一些列因素和公式得出该轮胎的负载能力16 ...17return load;18}1920class BenzCar21{22public:23int getDistance( )24private:25 MichelinWheel* wheel26int speed27};28 BenzCar::BenzCar(MichelinWheel* w)29{30 wheel=w;31}32BenzCar::getDistance ( )33{34 carSpeed=speed;35//经过一些列因素和公式得出汽车在某个速度的制动距离36 ...37return distance38 }
那么这里我们可以看出,BenzCar这个类对MichelinWheel这个类依赖很大,因为得到的制动距离是因轮胎负载力这个参数为主要因素,那么我们一般设计类,就可以抽象化、一般化,如果某个汽车使用MichelinWheel轮胎它的制动距离和上面是一样的。
1class MichelinWheel 2{ 3public: 4 MichelinWheel(int q,...); 5int getFriction( ); 6private: 7int qulity; 8 .... 9};10 MichelinWheel::MichelinWheel( int q,....)11:quilty(q)12{}13int MichelinWheel::getFriction( )14{15//经过一些列因素和公式得出该轮胎的摩擦力16 ...17return friction;18}1920class Car21{22 vritual int getDistance( )=0;23};2425class BenzCar:public Car26{27public:28int getDistance( )29private:30 MichelinWheel* wheel31int speed32};33 BenzCar::BenzCar(MichelinWheel* w)34{35 wheel=w;36}37BenzCar::getDistance ( )38{39 carSpeed=speed;40//经过一些列因素和公式得出汽车在某个速度的制动距离41 ...42return distance43 }
那么现在看来是汽车这个抽象类依赖MichelinWheel这个类,它的制动距离受MichelinWheel这个类的影响。那么现在实际情况是汽车不仅仅使用米其林轮胎,还使用普利司通轮胎和其它等等。如果使用普利司通轮胎,那么摩擦力计算又改变了,所以抽象化,制动距离只依赖与抽象的轮胎中的获得摩擦力的方法了。
1class Wheel 2{ 3public: 4virtualint getFriction( )=0; 5}; 6 7class MichelinWheel:public Wheel 8{ 9public:10 MichelinWheel(int q,...);11int getFriction( );12private:13int qulity;14 ....15};16 MichelinWheel::MichelinWheel( int q,....)17:quilty(q)18{}19int MichelinWheel::getFriction( )20{21//经过一些列因素和公式得出该轮胎的摩擦力22 ...23return friction ;24}2526class Car27{28 vritual int getDistance( )=0;29};3031class BenzCar:public Car32{33public:34int getDistance( )35private:36 Wheel* wheel37int speed38};39 BenzCar::BenzCar(Wheel* w)40{41 wheel=w;42}43BenzCar::getDistance ( )44{45 carSpeed=speed;46//经过一些列因素和公式得出汽车在某个速度的制动距离47 ...48return distance49 }