bridge
1 意图:将抽象部分与实现部分分离,使得它们都可以独立地变化
2 别名:Handle/Body
3 动机:客户在创建窗口时应该不涉及到具体实现部分。仅仅是窗口的实现部分依赖于应用运行的平台。
客户代码在创建窗口时,就不应涉及到特定平台。
接口 实现(Imp)
4 适用性:
. 不希望在抽象和实现部分之间有一个固定的绑定关系。在运行时刻,实现部分可以被选择或切换。
. 类的抽象以及它的实现部分可以通过生成子类的方法加以扩充,可以对不同的接口和实现部分进行组合,分别对它们进行扩充。
. 对一个抽象的实现部分的修改应该对客户不产生影响,即客户代码不必重新编译
. 对客户完全隐藏抽象的实现部分。C++中,类的表示在类接口中是可见的
. 这种类层次结构成为嵌套的普化
. 多个对象间共享实现,对客户透明
5 参与者:
. Abstraction:
定义抽象类的接口,维护一个指向Implementor对象的指针。
. RefinedAbstraction:
扩充由Abstraction定义的接口
. Implementor:
定义实现类的接口,该接口不一定要与Abstraction接口完全一致,实际上二者可以完全不同。
Implementor提供基本操作,Abstraction定义了基于这些基本操作的较高层次的操作。
. ConcreteImplementor:实现Implementor接口并定义它的具体实现
6 协作:
Abstraction将client的请求转发给它的Implementor对象。
7 效果:
有点:
1)分离接口与其实现部分
一个接口的实现未必绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象设置在运行时刻改变它的实现。
有助于降低对实现部分编译时刻的依赖。改变一个实现类时,不需要重新编译Abstraction和客户程序。
接口与实现分离,有助于分层,从而产生更好的结构化系统。系统的高层仅需要知道Abstraction和Implementor
2)提高可扩充性
可以独立地Abstraction和Implementor的层次进行扩充
3)实现细节对客户透明:
8 实现:
注意:
1)仅有一个Implementor
2)创建正确的Implementor对象 可以引入一个factory对象,由它创建具体的实现对象
3)共享Implementor:Handle/Body Body有一个引用计数器,Handle对它进行增减操作。
4)采用多重继承机制:将抽象接口和它的实现结合起来。 静态继承,所以并非真正的bridge
9 相关模式:
. 抽象厂可以创建和配置一个Bridge模式
. Adapter帮助无关的类协同工作通常系统设计完成后才会被使用。Bridge在设计开始前就使用,抽象接口和实现部分独立改变。
bridge的更多相关文章
- PHP设计模式(八)桥接模式(Bridge For PHP)
一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
- Configure a bridge interface over a VLAN tagged bonded interface
SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red ...
- Create a bridge using a tagged vlan (8021.q) interface
SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...
- Configure bridge on a team interface using NetworkManager in RHEL 7
SOLUTION IN PROGRESS February 29 2016 KB2181361 environment Red Hat Enterprise Linux 7 Teaming,Bridg ...
- 理解 neutron(15):Neutron linux-bridge-agent 创建 linux bridge 的简要过程
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- KVM 虚拟机联网方式:NAT 和 Bridge
KVM 客户机网络连接有两种方式: 用户网络(User Networking):让虚拟机访问主机.互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整.NA ...
- 桥接模式/bridge模式/对象结构型
意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...
- The network bridge on device VMnet0 is not running
The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...
- Net设计模式实例之桥接模式( Bridge Pattern)
一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...
- Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
随机推荐
- transform的用法和注意事项
1.作用: 1)transform可以控制平移.比例缩放和旋转. 2)transform中的方法主要分为两种:带make和不带make的方法. 3)带make的方法主要是基于控件最初的状态进行改变,所 ...
- 自定义 导航条分割线,tabBar分割线颜色(或者是 去掉)
UIView * lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bgView.frame.size.width, 0.5)]; l ...
- js展开一颗树
Tree View 指令不支持 树结构数据源, 只支持单层数组.(也许是我没发现,人家可以设置) .我只能把树展开,变成单层数组.然后还要记录已经递归到第一层了.比如这样. <!doctype ...
- Linux下dns服务器搭建
Linux下dns服务器搭建1-环境Red Hat Enterprise Linux Server release 6.7 (Santiago)2-配置本地yum源安装dns相关包yum -y ins ...
- 什么是core dump linux下用core和gdb查询出现"段错误"的地方
什么是core dump linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...
- iOS,图片处理
1.旋转图片 2.缩放图片 3.截取图片指定区域 4.祛除图片白色背景,弄成透明png 5.将UIView转化为UIImage,并转化为data和base64 6.将视频一帧(CMSampleBuff ...
- http cache 原理实战演习
有篇博文介绍的原理已经比较清楚了,见下面链接, 本文给出实验结果. http://www.cnblogs.com/cocowool/archive/2011/08/22/2149929.html La ...
- react input 获取/失去焦点
<div className={ this.state.focus ? "dis_bottom_left_onfocus" : "dis_bottom_left&q ...
- Markdown 语法和 MWeb 写作使用说明
---恢复内容开始--- # Markdown 语法和 MWeb 写作使用说明 Markdown 的设计哲学 Markdown 的目標是實現「易讀易寫」. 不過最需要強調的便是它的可讀性.一份使用 M ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 总结
前言 写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理 ...