当前位置: 首页 > news >正文

信息无障碍 网站建设望野王绩

信息无障碍 网站建设,望野王绩,网站开发结课大作业,用html5设计个人网站2. 桥接模式 2.1. 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形#xff0c;我们至少需要4个形状类#xff0c;但是如果绘制的图形需要具有不同的颜色#xff0c;如红色、绿色、蓝色等#xff0c;此时至少有如下两种设计方案#xff1a; 第一种设计方案是为每一种形状… 2. 桥接模式 2.1. 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形我们至少需要4个形状类但是如果绘制的图形需要具有不同的颜色如红色、绿色、蓝色等此时至少有如下两种设计方案 第一种设计方案是为每一种形状都提供一套各种颜色的版本。 第二种设计方案是根据实际需要对形状和颜色进行组合 对于有两个变化维度即两个变化的原因的系统采用方案二来进行设计系统中类的个数更少且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系从而降低了类与类之间的耦合减少了代码编写量。 2.2. 模式定义 桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离使它们都可以独立地变化。它是一种对象结构型模式又称为柄体(Handle and Body)模式或接口(Interface)模式。 2.3. 模式结构 桥接模式包含如下角色 Abstraction抽象类 RefinedAbstraction扩充抽象类 Implementor实现类接口 ConcreteImplementor具体实现类 2.4. 时序图 2.5. 代码分析 #include iostream #include ConcreteImplementorA.h #include ConcreteImplementorB.h #include RefinedAbstraction.h #include Abstraction.husing namespace std;int main(int argc, char *argv[]) {Implementor * pImp new ConcreteImplementorA();Abstraction * pa new RefinedAbstraction(pImp);pa-operation();Abstraction * pb new RefinedAbstraction(new ConcreteImplementorB());pb-operation(); delete pa;delete pb;return 0; } /// // RefinedAbstraction.h // Implementation of the Class RefinedAbstraction // Created on: 03-十月-2014 18:12:43 // Original author: colin ///#if !defined(EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_) #define EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_#include Abstraction.hclass RefinedAbstraction : public Abstraction {public:RefinedAbstraction();RefinedAbstraction(Implementor* imp);virtual ~RefinedAbstraction();virtual void operation();}; #endif // !defined(EA_4BA5BE7C_DED5_4236_8362_F2988921CFA7__INCLUDED_) /// // RefinedAbstraction.cpp // Implementation of the Class RefinedAbstraction // Created on: 03-十月-2014 18:12:43 // Original author: colin ///#include RefinedAbstraction.h #include iostream using namespace std;RefinedAbstraction::RefinedAbstraction(){}RefinedAbstraction::RefinedAbstraction(Implementor* imp):Abstraction(imp) { }RefinedAbstraction::~RefinedAbstraction(){}void RefinedAbstraction::operation(){cout do something else ,and then endl;m_pImp-operationImp(); } 运行结果 2.6. 模式分析 理解桥接模式重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦使得二者可以独立地变化。 抽象化抽象化就是忽略一些信息把不同的实体当作同样的实体对待。在面向对象中将对象的共同性质抽取出来形成类的过程即为抽象化的过程。 实现化针对抽象化给出的具体实现就是实现化抽象化与实现化是一对互逆的概念实现化产生的对象比抽象化更具体是对抽象化事物的进一步具体化的产物。 脱耦脱耦就是将抽象化和实现化之间的耦合解脱开或者说是将它们之间的强关联改换成弱关联将两个角色之间的继承关系改为关联关系。桥接模式中的所谓脱耦就是指在一个软件系统的抽象化和实现化之间使用关联关系组合或者聚合关系而不是继承关系从而使两者可以相对独立地变化这就是桥接模式的用意。 2.7. 实例 如果需要开发一个跨平台视频播放器可以在不同操作系统平台如Windows、Linux、Unix等上播放多种格式的视频文件常见的视频格式包括MPEG、RMVB、AVI、WMV等。现使用桥接模式设计该播放器。 2.8. 优点 桥接模式的优点: 分离抽象接口及其实现部分。 桥接模式有时类似于多继承方案但是多继承方案违背了类的单一职责原则即一个类只有一个变化的原因复用性比较差而且多继承结构中类的个数非常庞大桥接模式是比多继承方案更好的解决方法。 桥接模式提高了系统的可扩充性在两个变化维度中任意扩展一个维度都不需要修改原有系统。 实现细节对客户透明可以对用户隐藏实现细节。 2.9. 缺点 桥接模式的缺点: 桥接模式的引入会增加系统的理解与设计难度由于聚合关联关系建立在抽象层要求开发者针对抽象进行设计与编程。 桥接模式要求正确识别出系统中两个独立变化的维度因此其使用范围具有一定的局限性。 2.10. 适用环境 在以下情况下可以使用桥接模式 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性避免在两个层次之间建立静态的继承联系通过桥接模式可以使它们在抽象层建立一个关联关系。 抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合即系统需要对抽象化角色和实现化角色进行动态耦合。 一个类存在两个独立变化的维度且这两个维度都需要进行扩展。 虽然在系统中使用继承是没有问题的但是由于抽象化角色和具体化角色需要独立变化设计要求需要独立管理这两者。 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统桥接模式尤为适用。 2.11. 模式应用 一个Java桌面软件总是带有所在操作系统的视感(LookAndFeel)如果一个Java软件是在Unix系统上开发的那么开发人员看到的是Motif用户界面的视感在Windows上面使用这个系统的用户看到的是Windows用户界面的视感而一个在Macintosh上面使用的用户看到的则是Macintosh用户界面的视感Java语言是通过所谓的Peer架构做到这一点的。Java为AWT中的每一个GUI构件都提供了一个Peer构件在AWT中的Peer架构就使用了桥接模式 2.12. 模式扩展 适配器模式与桥接模式的联用: 桥接模式和适配器模式用于设计的不同阶段桥接模式用于系统的初步设计对于存在两个独立变化维度的类可以将其分为抽象化和实现化两个角色使它们可以分别进行变化而在初步设计完成之后当发现系统与已有类无法协同工作时可以采用适配器模式。但有时候在设计初期也需要考虑适配器模式特别是那些涉及到大量第三方应用接口的情况。 2.13. 总结 桥接模式将抽象部分与它的实现部分分离使它们都可以独立地变化。它是一种对象结构型模式又称为柄体(Handle and Body)模式或接口(Interface)模式。 桥接模式包含如下四个角色抽象类中定义了一个实现类接口类型的对象并可以维护该对象扩充抽象类扩充由抽象类定义的接口它实现了在抽象类中定义的抽象业务方法在扩充抽象类中可以调用在实现类接口中定义的业务方法实现类接口定义了实现类的接口实现类接口仅提供基本操作而抽象类定义的接口可能会做更多更复杂的操作具体实现类实现了实现类接口并且具体实现它在不同的具体实现类中提供基本操作的不同实现在程序运行时具体实现类对象将替换其父类对象提供给客户端具体的业务操作方法。 在桥接模式中抽象化(Abstraction)与实现化(Implementation)脱耦它们可以沿着各自的维度独立变化。 桥接模式的主要优点是分离抽象接口及其实现部分是比多继承方案更好的解决方法桥接模式还提高了系统的可扩充性在两个变化维度中任意扩展一个维度都不需要修改原有系统实现细节对客户透明可以对用户隐藏实现细节其主要缺点是增加系统的理解与设计难度且识别出系统中两个独立变化的维度并不是一件容易的事情。 桥接模式适用情况包括需要在构件的抽象化角色和具体化角色之间增加更多的灵活性避免在两个层次之间建立静态的继承联系抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响一个类存在两个独立变化的维度且这两个维度都需要进行扩展设计要求需要独立管理抽象化角色和具体化角色不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统。 [上一节]设计模式-结构型模式之适配器模式(Adapter) [下一节]设计模式-结构型模式之装饰模式
http://www.hkea.cn/news/14501433/

相关文章:

  • 求和萝莉做的网站什么网站比谷歌还好
  • 网站备案要钱么安徽省建筑人员信息网
  • 怎么做免费的网站链接医药网站设计
  • 网站建设与管理 需求分析桥头网站建设
  • 铺面怎样做放上网站武威 网站开发
  • 知名网站制作公司没有网站百度推广
  • 建设银行网站一直打不开wordpress的程序文件
  • 百家号seo怎么做购物网站怎么做优化
  • 盛泽建设局网站丹阳建站
  • 民非企业网站建设费怎么记账网站运营与管理的目的是
  • 淘宝客网站怎么批量采集淘宝商品方维采集淘宝数据思路WordPress播放背景音乐
  • 怎样做一个单页面网站蚌埠网站建设公司
  • 网站整体风格设计滨州制作网站
  • 福建 专业网站建设公司网站模板能自己做吗
  • 自己做自己的私人网站国外商城网站设计
  • 网站 设计淄博做网站公司有哪些
  • 中企动力技术支持网站台州百度推广优化
  • 游戏网站怎么建设网站建设哪家比较好
  • 不是网站建设必须经历的过程网站首页flash模板
  • 旅游网站建设风格想建书画网站怎么做的
  • vue 做网站 seowordpress整站下载
  • 网站建设描述书哈尔滨vi设计公司
  • 利用百度图片做网站外链企业招聘网站哪个最好
  • 网站开发企业开发商城网站怎么做seo
  • 公司自己做网站西安网站开发xamokj
  • 江苏 做网站网页设计公司企业文化
  • 郑州企业网站排名优化公司建设官方网站的费用账务处理
  • it彩票网站建设维护工程师长春最专业的网站建设
  • 网站仿站建设赚钱的软件
  • 做网站除了有服务器还需要什么问题常州金坛网站建设