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

信息无障碍 网站建设网站页面大小

信息无障碍 网站建设,网站页面大小,东营网站建设服务,网站建设与运营就业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/14420445/

相关文章:

  • 做衣服视频有些什么网站联盟营销网站有哪些
  • 网站备案安全吗工信部怎么查网站备案
  • 电子商务网站建设开题报告个人网站有前途吗
  • 网站制作能赚多少钱陕西省建设厅网站ca验证失败
  • 自己可以接单做网站吗汉中做网站电话
  • 广州住建厅官方网站江门网站推广深圳公司
  • 一家公司多个网站备案php网站支付宝接口
  • 代充网站怎么做湖南省交通建设质量监督站网站
  • 网站手机版模板免费下载公司网站制作的费用申请
  • php网站开发待遇网站域名的建立
  • 常州天启建设公司网站wordpress淘宝客主题使用说明
  • 房山石家庄网站建设淮安市建设局网站首页
  • 当当网网站建设策划书wordpress建站vip全站教程
  • 免费网站电视剧全免费的app那些网站可以做推广
  • 服装网站的建设与管理建行的官网网址是什么
  • 网页制作一个网站八个页面咋做创新的武进网站建设
  • 文化馆的网站怎么建设wordpress导出word
  • 苏州网站建设最佳方案码迷seo
  • 定制网站开发全屋定制装修加盟网
  • 免费网站统计代码中国人做跨电商有什么网站
  • 网站怎么建设教程东莞健康app下载
  • 响应式网站工具会展中心网站建设
  • 百度网站大全帝国网站管理系统视频教程
  • 东莞高端网站建设哪个好wordpress用七牛
  • 一流的句容网站建设小程序定制开发公司前十名
  • 申请网站空间是申请域名吗蚌埠网站建设蚌埠
  • 为什么访问外国网站速度慢找工程包工平台app
  • 做网站创业需要注册公司吗湘西州住房和城乡建设局网站
  • 房地产微网站模板深圳建网站公司
  • 网站安全注意哪些问题吗网站前台模板下载