七个结构模式之桥接模式(Bridge Pattern)
问题:
当存在多个独立的变化维度时,如果仍采用多层继承结构,会急剧的增加类的个数,因此可以考虑将各个维度分类,使他们不相互影响。
定义:
将抽象部分与它的实现部分进行分离,抽象部分只保留最为本质的部分,而其他对该类的扩展均放到实现部分,进而使他们独立地变化。并在抽象层建立耦合,方便对各个维度进行扩展。
结构图:
- Abstracttion:抽象类,是整个桥接模式所表述的各种类别的核心类,例如毛笔-颜色中的毛笔,图片-操作系统中的图片。首先它定义了扩展类中的接口,另外它还定义了一个关于实现类Implementor的成员对象impl,由此来与实现维度产生联系。
- RefineAbstracttion:扩充抽象类,实现了抽象类定义的接口,即实现核心类的扩展操作,并且可以调用impl相关的业务方法。
- Implementor:实现类接口,定义了与Abstraction另外一个维度的基本接口,其它继承类在此接口进行实现和扩展。Implementor的接口设计成Abstraction类的另一类属性和行为,对其进行修饰和相关操作。
- ConcreteImple:具体实现类,实现了Implementor定义的接口,再具体程序中将替换父类,做具体的执行操作。
注意:
使用桥接模式前,需要识别出两个独立变化的维度,然后将它们设计为两个独立的继承等级结构,并在抽象层建立耦合。对于固有特征可以设计为抽象部分,对于行为和属性可以设计为实现类。行为和其它属性与固有特征存在一种设置关系,可以使用成员对象进行关联。
桥接模式和适配器模式的联合使用:桥接模式一般用于系统初步设计阶段,分析系统有哪些独立变化的维度,然后将其分解并在抽象层建立耦合。当初步设计完成,并在后期发现无法与已有类无法协同工作,可以使用适配器模式。
优点:
- 分离抽象和实现两个维度,解耦抽象和实现的绑定关系,使得各个维度可以独立变化。提高系统的可扩展性,不需要修改原有系统。
- 是设计模式基本原则的很好体现,符合开闭原则,单一职责原则,合成复用原则,里氏替换原则,依赖倒置原则,接口隔离原则等。
缺点:
- 在分析和辨别两个维度的时候有一定的困难,并且增加系统复杂度。
适用情景:
- 含有多个维度的独立变化的类结构,每个维度都可以扩展。
- 避免在层次之间使用继承关系,通过桥接模式可以使用组合复用原则进行扩展。
实例:
七个结构模式之桥接模式(Bridge Pattern)的更多相关文章
- 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)
结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 结构 ...
- Linux下NAT模式和桥接模式的网络配置
Linux下NAT模式和桥接模式的网络配置 最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里. 我的运行环境是:主机 windows 7 虚拟机 Virtualb ...
- 虚拟机网络连接模式中桥接模式和NAT模式的区别
1.桥接模式:当虚拟机系统的网络连接模式为桥接模式时,相当于在主机系统和虚拟机系统之间连接了一个网桥,而网桥两端的网络都属于同一网络,主机和虚拟机是处于同一网络中的对等主机. 实例,在使用Xshell ...
- VMware虚拟机上网络连接模式bridged(桥接模式)
VMware虚拟机上网络连接模式bridged(桥接模式)的实质就是虚拟机本身利用主机的网卡对外直接作为一个真实的物理主机存在. 也就是理论上此时的虚拟机和主机没什么关系,只是和主机公用了一块网卡,其 ...
- 结构型模式(二) 桥接模式(Bridge)
一.动机(Motivation) 在很多游戏场景中,会有这样的情况:[装备]本身会有的自己固有的逻辑,比如枪支,会有型号的问题,同时现在很多的游戏又在不同的介质平台上运行和使用,这样就使得游戏的[装备 ...
- 【设计模式】Bridge模式(桥接模式)
最近的一次面试中,被问到桥接模式,以前呢并没有很仔细的研究过这个设计模式,借此机会剖析一下. 先给出自己对这个模式理解后的源码: interface A{ void methodA(); } inte ...
- GoF23种设计模式之结构型模式之桥接模式
一.概述 将类的抽象部分与实现分部分离开来,使它们都可以独立地变化. 二.适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候.例如:在程序运行时实现部分应可以被选择或切换. ...
- java设计模式5.组合模式、门面模式、享元模式、桥接模式
组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...
- 1_NAT模式和桥接模式下的网络配置
相信当你看到这篇文章时,你一定对linux的桥接模式和NAT模式有所了解,所以你应该是能看懂这篇文件的,希望对你有所帮助,figthing ! 一.桥接模式:虚拟机和主机是连在同一个路由下的. ...
随机推荐
- SpringBoot常用配置简介
SpringBoot常用配置简介 1. SpringBoot中几个常用的配置的简单介绍 一个简单的Spring.factories # Bootstrap components org.springf ...
- windows phone 存储图片 数据库写法
byte[] _DiseaseImage; [Column(DbType = "Image", UpdateCheck = UpdateCheck.Never)] //保证图像超出 ...
- CSS中常见的6种文本样式
前面的话 CSS文本样式是相对于内容进行的样式修饰.由于在层叠关系中,内容要高于背景.所以文本样式相对而言更加重要.有些人对文本和字体样式之间的不同不太了解,简单地讲,文本是内容,而字体则用于显示这个 ...
- Linux - Screen
GNU's Screen homepage Screen是由GNU计划开发的用于命令行终端切换的自由软件,可以看作是窗口管理器的命令行界面版本. 可以通过该软件同时连接多个本地或远程的命令行会话,并在 ...
- Nodejs学习笔记(一)——初识Nodejs
前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进.起初准备好好研究下Spring这个框架,下载了源码,结合书籍准备一探究竟,看 ...
- 学习使用 jQuery & CSS3 制作照片堆栈效果
在这个小实验中,我们使用 jQuery & CSS3 创建了一个交互式的照片堆栈效果.提供了一些模拟现实的互动的可能性给用户.这个想法的思路是:有一些照片在桌面上可以拖放一样,堆放和删除,每个 ...
- Apache+MySQL+PHP开发环境的搭建(二)
通过自主选择相应的apache,mysql,php等软件,根据自己的应用开发需求进行安装.此方法搭建的环境自主性较强,搭建过程较为复杂,繁琐. 1.所需软件: Apache: http-2.2.22- ...
- 每日学习总结<二> 2015-9-1
Android: 知识点: 子线程中无法更新UI,因为UI是线程不安全的. Android的UI单线程模式: 不能阻塞UI线程: 不能从UI线程的外部访问Android UI toolkit ...
- 使用php来访问操作sql server
使用php来访问操作sql server 在此分成三步走: 第一部:查看配置,下载文件 首先查看自己的php和sql server版本 Php文件输入echo PHP_VERSION 运行脚本就可以 ...
- 实例演示Android异步加载图片
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...