桥接模式(bridge pattern)-------结构型模式
桥接模式是一种对象结构型模式,其将抽象部分和它的实现部分分离,使它们都可以独立的变化,又称为柄体(Handle and Body)模式或接口(Interface)模式。
优点:
1、分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象类和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度变化(即抽象和实现不再在同一个继承层次中结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任意组合子类,从而获得多维度组合对象)。
2、在很多情况下,桥接模式可以取代多层继承方案。多层继承方案违背了单一职责原则,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大地减少了子类的个数。
3、桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合开闭原则。

桥接模式中包含4个角色
1、Abstraction,它与Implementor之间具有关联关系,既可以包含抽象业务方法,也可以包含具体业务方法。
2、RefinedAbstraction,实现在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。
3、Implementor,通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。
4、ConcreteImplementor,具体实现Implementor,在不同的ConcreteImplementor中提供基本操作的不同实现。

桥接模式(bridge pattern)-------结构型模式的更多相关文章
- 设计模式(六)桥连模式Bridge(结构型)
		设计模式(六)桥连模式Bridge(结构型) 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够 ... 
- 组合模式(Composite Pattern) ------------结构型模式
		组合模式使用面向对象的思想来实现树形结构的处理和构件,描述了如何将容器对象和叶子对象进行递归组合,实现简单,灵活性好. 组合模式(Composite Pattern):组合多个对象形成树形结构以表示具 ... 
- NET设计模式 第二部分 结构性模式(14):结构型模式专题总结
		——探索设计模式系列之十五 Terrylee,2006年5月 摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能( ... 
- ANDROID 中设计模式的采用--结构型模式
		 结构型模式中的适配器模式.外观模式.装饰模式.代理模式都属于包装模式,都是对另外的类或对象的包装,只是各自的意图不同. 适配器模式通过对另外的类或对象的包装,将其接口转换为用户期望 ... 
- 跟着实例学习设计模式(9)-桥接模式bridge(结构型)
		桥接模式属于结构型设计模式. 设计意图:将抽象部分与实现部分分离.使它们都能够独立的变化. 一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这种实 ... 
- 设计模式学习之桥接模式(Bridge,结构型模式)(15)
		参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化, ... 
- 设计模式--桥接模式Bridge(结构型)
		一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ... 
- 适配器模式(Adapter Pattern)----------结构型模式
		对象适配器模式的缺点是:与类适配器模式相比,要在适配器中置换适配着类的某些方法比较麻烦.如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,在子类中将适配者类的方法置换掉,然后再把适 ... 
- 设计模式-Bridge(结构型模式)-用于客户需求较多,频繁对类进行添加修改的情形,将抽象类与具体实现类分开
		以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //AbstractionImp.h #pragma once class AbstractionImp { public: ... 
随机推荐
- Webpack中的sourcemap
			Webpack中sourcemap的配置 sourcemap是为了解决开发代码与实际运行代码不一致时帮助我们debug到原始开发代码的技术.尤其是如今前端开发中大部分的代码都经过编译,打包等工程化转换 ... 
- Chisel Tutorial(七)——模块
			下面内容根据2015-7-10版的Chisel 2.2 Tutorial整理 Chisel中的模块与Verilog HDL中模块的概念十分相似,都是用层次结构描写叙述电路.Chisel中的module ... 
- TreeView 高速单击时不运行AfterCheck时间
			解决方法1: 在AfterCheck事件中,通过System.Threading.Thread.Sleep()来控制函数的运行的最短时间.保证函数运行时间必须大于某个值 解决方法2: 编写列TreeV ... 
- 利用Django中的url方法实现地址动态拼接自动生成超链接地址
			目标 建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息. URL方法简介 功能:返回一个绝对路径的引用(不包含域名的URL):该引用匹配一个给定的视图函数和 一 ... 
- python random模块(获取随机数)的常用方法及示例
			random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用 ... 
- eclipse的remote search
			一般你希望以部分文件名作为关键字的时候,可以选择这个搜索选项,当然你也可以选择操作系统自带的搜索功能 
- [WF4.0 实战] AutoResetEvent具体解释(线程独占訪问资源)
			由来: 在学习工作流的过程中,宿主程序中会出现这么一段代码: staticAutoResetEvent instanceUnloaded = new AutoResetEvent(false); 然后 ... 
- Linux Ubuntu下软件包管理
			自己整理的一个关于dpkg, apt, aptitude三者的常用命令,方便以后查阅. dpkg: dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件, ... 
- c++的内存分配
			C++堆和栈的分配 腾讯.金山笔试常考 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈. 堆区(heap) — 一般由程序员分配释放, ... 
- 【译】Linux概念架构的理解
			声明:本文转载,原路径地址:http://www.jianshu.com/p/c5ae8f061cfe 摘要 Linux kernel成功的两个原因:(1)灵活的架构设计使得大量的志愿开发者能够很容易 ... 
