bridge模式简要介绍1229.docx
《bridge模式简要介绍1229.docx》由会员分享,可在线阅读,更多相关《bridge模式简要介绍1229.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、bridgge模式1. 问题题 总结面面向对象实实际上就两两句话:一一是松耦合合(Couuplinng),二二是高内聚聚(Cohhesioon)。面面向对象系系统追求的的目标就是尽尽可能地提提高系统模模块内部的的内聚(CCohession)、尽尽可能降低低模块间的的耦合(CCouplling)。然然而这也是是面向对象象设计过程程中最为难难把握的部部分,大家家肯定在OOO系统的的开发过程程中遇到这这样的问题题:1)客户给给了你一个个需求,于于是使用一一个类来实实现(A);2)客户需需求变化,有有两个算法法实现功能能,于是改改变设计,我我们通过一一个抽象的的基类,再再定义两个个具体类实实现两个不不
2、同的算法法(A1和和A2);3)客户又又告诉我们们说对于不不同的操作作系统,于于是再抽象象一个层次次,作为一一个抽象基基类A0,在在分别为每每个操作系系统派生具具体类(AA00和AA01,其其中A00表表示原来的的类A)实实现不同操操作系统上上的客户需需求,这样样我们就有有了一共44个类。4)可能用用户的需求求又有变化化,比如说说又有了一一种新的算算法.5)我们陷陷入了一个个需求变化化的郁闷当当中,也因因此带来了了类的迅速速膨胀。Bridgge模式则则正是解决决了这类问问题。2. 模式式选择Briddge模式式典型的结结构图为: 在Brridgee模式的结结构图中可可以看到,系系统被分为为两个
3、相对对独立的部部分,左边边是抽象部部分,右边边是实现部部分,这两两个部分可可以互相独独立地进行行修改:例例如上面问问题中的客客户需求变变化,当用用户需求需需要从Abbstraactioon派生一一个具体子子类时候,并并不需要像像上面通过过继承方式式实现时候候需要添加加子类A11和A2了了。另外当当上面问题题中由于算算法添加也也只用改变变右边实现现(添加一一个具体化化子类),而而右边不用用在变化,也也不用添加加具体子类类了。 一切都都变得ellegannt!vieww plaaincoopy tto cllipbooardpprintt?/* * 作者:一雨田(hhttp:/ * * Briid
4、ge模模式:将抽抽象部分与与它的实现现部分分离离,使它们们都可以独独立地变化化。 * 这句话话真是很晦晦涩,我来来解释一下下。所谓的的实现部分分,你可以以想象成一一个功能库库,这个库库是用类来来组织的, * 并且实实现了你需需要的功能能,而抽象象部分就是是使用这个个库的类。 * 让他们们独立变化化的意思就就是说,库库增加或者者使用库的的代码改变变都是在两两边独立变变化的,不不影响另一一边 * 就好像像隔了个桥桥梁一样,如如果你理解解了,就会会觉得BRRIDGEE这个名字字改得真好好。 * 好了,如如果不明白白也没关系系,先看看看下面的代代码。应该该能明白的的 */ /* * 任务叙叙述:我们们
5、现在要实实现一个画画图系统,这这个系统的的需求暂时时来说有以以下几个: * 1、画画圆、画长长方形。(先实现画画这两个形形状) * 2、已已经有两个个画图库了了,这些画画图库中定定义了我们们需要的操操作,我们们没必要重重新去实现现了 * 3、我我们的系统统能够决定定使用哪个个的画图库中的操作作 * 根据以以上的需求求,我们的的代码设计计如下(这这里先不使使用Briidge模模式,以便便对比) : */ /* * 注意,这这里使用了了个预编译译宏 _BBRIDGGE_MOODE 来来隔开使用用Briddge和不不使用Brridgee两块代码码。可以以以这个来做做分界对比比看 * 两部分分的代码
6、*/ #incllude #incllude usingg nammespaace sstd; / 把这这里注释掉掉就是不使使用Briidge模模式的代码码 #defiine _BRIDDGE_MMODE / 画图图库1 classs CDrrawLiib1 publiic: vvoid DrawwCirccle() ccout 画圆操作作1 enndl; vvoid DrawwRecttanglle() ccout 画长长方形操作作1 enndl; vvoid DrawwTriaanglee() ccout 画三角形形操作1 endll; ; / 画图图库2 classs CDrrawLii
7、b2 publiic: vvoid DrawwCirccle() ccout 画圆操作作2 enndl; vvoid DrawwRecttanglle() ccout 画长方形形操作2 endll; vvoid DrawwTriaanglee() ccout 画三角形形操作2 endll; ; / 只只要声明 _BRIIDGE_MODEE 就可以以在使用或或者不使用用Briddge模式式间切换了了 #ifnddef _BRIDDGE_MMODE/不使用用桥模式代代码 / 看到到形状,很很容易想到到经典的SShapee抽象类,并并定义一个个Draww接口 / 这里里1代表使使用画图库库1的画图图
8、操作 classs CShhape11 publiic: vvirtuual vvoid Draww() = 0; proteectedd: CCDrawwLib11 _drrawLiib; ; / 画圆圆和画长方方形,好,这这里就派生生出两个形形状 classs CCiirclee1: ppubliic CSShapee1 publiic: / 实现现Draww操作,使使用画图库库1 vvirtuual vvoid Draww() / 使用用画图库11 _drawwLib.DrawwCirccle(); ; classs CReectanngle11: puublicc CShhape11
9、publiic: / 实现现Draww操作,但但是要使用用画图库11 vvirtuual vvoid Draww() / 使用用画图库11 _drawwLib.DrawwRecttanglle(); ; / 再定定义使用画画图库2的的Shappe classs CShhape22 publiic: vvirtuual vvoid Draww() = 0; proteectedd: CCDrawwLib22 _drrawLiib; ; / 画圆圆和画长方方形,好,这这里就派生生出两个形形状 classs CCiirclee2: ppubliic CShhape22 publiic: / 实现现D
10、raww操作,使使用画图库库2 vvirtuual vvoid Draww() / 使用用画图库22 _drawwLib.DrawwCirccle(); ; classs CReectanngle22: puublicc CShhape22 publiic: / 实现现Draww操作,但但是要使用用画图库22 vvirtuual voidd Draaw() / 使用用画图库22 _drawwLib.DrawwRecttanglle(); ; void Draww1(CSShapee1 &ss) ss.Draaw(); void Draww2(CSShapee2 &ss) ss.Draaw();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- bridge 模式 简要 介绍 1229
限制150内