设为首页 加入收藏

TOP

bridge pattern -- 桥接模式
2013-01-01 14:40:34 来源: 作者: 【 】 浏览:245
Tags:bridge pattern 桥接 模式

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 }

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇composite pattern -- 组合模式 下一篇adapter pattern--适配器模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: