几种结构型的设计模式概析【上】——Bridge模式,Adapter模式,Decorator模式【C++实现】
来源:互联网 发布:广州seo公司 编辑:程序博客网 时间:2024/06/04 19:54
Bridge模式适用于客户需求经常变化时的类的抽象和封装情况。在OO型的程序设计中,用户的需求变化,意味着类的重新抽象和封装,当用户的需求变化十分频繁时,类的重新抽象和封装工作也就颇为频繁,如此以来,将会增加和修改很多类。这对程序开发人员来说,无非是最大的痛苦。Bridge模式就是为此种情况而生,它将类的抽象和实现分为完全独立的两部分,然后通过聚合使两者又保持一定的联系。这与传统的抽象基类之后再继承子类的作用如出一辙,但却少了增加新类的环节,由此以来,程序员维护的类的数量就减少,代码的可读性也大大增加,最重要的是能时刻满足用户需求频繁变化的情况。以下是Bridge模式的UML图示(左边的类只负责抽象,右边的类进行具体抽象):
以下是上图的C++代码实现:
Adapter模式比较容易理解,具有很好的易用性。在实际开发中,我们经常会遇到这样一种问题:为了加快软件的开发流程,我们的有些功能实现靠第三方库的支持来完成,而这些库的接口又不能很好的满足程序开发的接口规范,必须经过处理后才能更好的应用于开发。于是我们就需要用到Adapter模式。它的唯一作用就是重新封装外来实现,对外重新开放一个更符合我们开发需求的接口。以下是Adapter模式的UML图示:
以下是上图的C++代码实现:
Decorator模式适用于子类的继承层次过深的情况,可以很巧妙的减少继承层数,并有效的的减少实现功能所需的代码量,无疑又是OO思想的一把利器。当需要对一个类增加新操作时,我们习惯的做法是将此类作为父类,然后再继承一个子类,将需要的实现放到子类中。但这样会带来一个问题,当我们需要的功能随着项目的进展而逐渐增多时,我们不得不每增加几项项操作,就继承一个子类,到了一定程度时,我们发现继承层数将会是空前的深,而且抽象基类为了实现多态, 必须为每一项操作新增一个纯虚函数。对于类似种种问题,Decorator模式给出了很好的解决方案,在抽象基类中,我们将看到虚函数是何等的少。Decorator的UML图示如下:
在上图中,Component为抽象基类,其操作只有一个Operation,对于其所指代的不同操作,将由子类ConcreteComponent来实现,当我们的需要增加新操作时,同样只需要新继承一个类,此类以Component为基类,在此基础上,实现自己的Operation,大体来看,同样是通过继承来增加新操作,但与我们平常的做法不同的是,此种方式的基类只有一个Component,继承层次只有一层,不管我们增加多少种操作,均是这样。在Decorator中通过与Component的组合来实现对Compnent的子类接口的应用。
以下是Decorator模式的C++代码实现:
- 几种结构型的设计模式概析【上】——Bridge模式,Adapter模式,Decorator模式【C++实现】
- 几种创建型的设计模式概析【上】——Factory模式, AbstractFactory模式,Singleton模式【C++实现】
- Builder,Adapter,Decorator,Bridge 模式
- 几种结构型的设计模式概析【下】——Flyweight模式,Facade模式和Proxy模式【C++实现】
- JAVA设计模式(7) —<结构型>装饰模式(Decorator)
- 设计模式之类对象结构型 — BRIDGE (桥接)模式
- Bridge模式——结构型模式
- [设计模式-结构型]装饰模式(Decorator)
- 结构型模式 Bridge和Adapter
- 设计模式(bridge和adapter)
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- 设计模式之类对象结构型 — ADAPTER (适配器)模式
- 设计模式之adapter bridge模式
- Adapter模式——结构型模式
- 常见设计模式的解析和实现(C++)之九—Decorator模式
- 结构型设计模式---适配器模式(adapter)
- 几种创建型的设计模式概析【下】——Builder模式,ProtoType模式【C++实现】
- 经典设计模式1:结构型模式:DECORATOR——装饰模式
- window.showModalDialog模态窗口参数说明
- php opcode缓存之apc
- eclipse汉化包 eclipse3.6汉化包 最新最全汉化包
- 网桥原理及源代码详解
- C++ 箭头-> 双冒号:: 点号.操作符区别
- 几种结构型的设计模式概析【上】——Bridge模式,Adapter模式,Decorator模式【C++实现】
- PAIP.自定义SELECT BOX COMMBO BOX展现.txt
- linux常用命令
- ASP入门(十) : Global.asa文件
- 替换Java文件的utf-8 BOM
- 网页特效:Rgb to hex 背景颜色代码生成
- Google C++ 编程规范——作用域
- 一位区域销售经理百条经验手记
- Windows XP 启动过程详解