B桥接模式ridge
1.一个简短的引论
1)模式概述:将抽象部分与实现部分分离。使它们都能够独立的变化。让抽象类和派生类各自实现自己的对象。当一个系统有多维度的变化时,将各个维度分离出来让它们独立于变化(多角度地分类实现对象),从而降低耦合。
它非常好的符合了OCP和优先使用对象,从而避免了仅仅用继承所造成的大量类的添加
2)核心:将抽象化(Abstraction)与实现化(Implementation)解耦。用组合/聚合关系取代继承
抽象化:将存在共性的多个实体当做一个实体对待。忽略多余信息
实现化:抽象化给出的详细实现
解耦:将存在于两个实体行为间的强关联去掉。即将抽象化和实现化之间的强关联变换为弱关联,达到解耦的目的。
2.UML与代码实现
1)结构:UML
结构:含有两个等级
抽象化等级结构:由抽象化角色和修正抽象化角色组成
实现化等级结构:由实现化角色和详细实现化角色组成
模式组成:
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个队实现化对象的引用
修正抽象化(RefinedAbstraction)角色:苦熬站抽象化角色,改变和修正父类对抽象化的定义
实现化(Implementor)角色:给出实现化角色的接口,但不给出详细的实现。
详细实现化(ConcreteImplementor)角色:给出实现化角色接口的详细实现
(实现化角色仅仅给出底层操作,而抽象化角色仅仅给出基于底层操作的更高一层的操作。)
2)java代码
public class Bridge{
//client实现
public static void main(String[]args)
{
Abstraction ab = new RefinedAbstraction();
ab.SetImplementor(new ConcreteImplementorA());
ab.Operation();
ab.SetImplementor(new ConcreteImplementorB());
ab.Operation();
}
}
//Implementor类
abstract class Implementor
{
public abstract void Operation();
}
//ConcreteImplementorA和ConcreteImplementorB等派生类
class ConcreteImplementorA extends Implementor
{
public void Operation()
{
System.out.println("详细实现A的方法运行");
}
}
class ConcreteImplementorB extends Implementor
{
public void Operation()
{
System.out.println("详细实现B的方法运行");
}
}
//Abstraction类
class Abstraction
{
protected Implementor implementor;
public void SetImplementor(Implementor implementor)
{
this.implementor=implementor;
}
public void Operation()
{
implementor.Operation();
}
}
//RefinedAbstraction类
class RefinedAbstraction extends Abstraction
{
public void Operation()
{
implementor.Operation();
}
}
3.长处
1)Bridge模式使对象间的组合关系解耦了抽象与实现之间固有的绑定关系。使得抽象和实现客运沿着各自的维度来变化
2)Bridge模式有时候类似于多继承方案,可是多继承往往违背单一职责原则,复用性较差。
它是比多继承方案更好的解决方法
3)一般用在两个很强的变化维度中,假设某个方向的变化维度并不强烈。则不一定要使用Bridge模式
4.应用
1)一个系统须要在构件的抽象化角色和详细化角色之间添加很多其它的灵活性。避免在两个层次间建立静态的联系
2)设计要求实现化角色的不论什么改变不影响client,即实现化角色的改变对client全然是透明的
3)一个构件有多余一个抽象化角色和实现化角色。系统须要他们之间进行动态耦合
4)系统中使用继承没有问题。可是抽象化角色和详细化角色须要独立变化,设计要求独立管理二者
5.其他相关模式
1)装饰模式:为了降低子类的数目,避免出现复杂的继承关系,有两种模式可供选用:桥接模式、装饰模式。
2)建造者模式:由对象的创建所带来的耦合性,能够用建造者模式解决,处理详细问题时可结合二者使用
小结
桥接模式把两个角色之间的继承关系改为聚合关系,从而使二者能够各自独立的变化。把原来在基类的实现化细节抽象出来,再构造到一个实现化的结构中。然后把原来的基类改造成一个抽象化的等级结构,这样就实现了系统在多个维度独立的变化
版权声明:本文博主原创文章,博客,未经同意不得转载。
B桥接模式ridge的更多相关文章
- BridgePattern(桥接模式)
/** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...
- PHP设计模式(八)桥接模式(Bridge For PHP)
一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
- 设计模式(八)桥接模式(Bridge Pattern)
一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视 ...
- 设计模式--桥接模式Bridge(结构型)
一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...
- vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!
现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...
- 桥接模式/bridge模式/对象结构型
意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...
- Objective-C 桥接模式 -- 简单实用和说明
桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的 比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合 然后生成这两个抽象类的实例XBox & ...
- C#设计模式-桥接模式
这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控 ...
- C#设计模式系列:桥接模式(Bridge)
1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...
随机推荐
- EL表达式(3)
本篇讲解使用EL表达式来调用Java方法(自定义EL函数)和Sun公司开发的EL函数库. 简单来说,我们在一个类中的某个方法,可以使用EL进行调用,这个能被EL表达式调用的方法称之为EL函数,但是这种 ...
- HTTP数据包头解析(简单清楚)
[转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...
- Qt Style Sheets Examples(QT真是有很全的文档)
http://doc.qt.io/qt-5/stylesheet-examples.html http://doc.qt.io/qt-4.8/stylesheet.html
- 静态书架和js模拟翻书效果
书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091
- MySQL 创建函数(Function)
目标 怎么样MySQL创建数据库功能(Function) 语法 CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,參数是可选的 RETUR ...
- windows下Memcached 架设及java应用
1 Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...
- [面经] 南京SAP面试(上)
背景 博主乃985弱校的小硕一枚,在南京某外企工作了两年,如今的公司还不错,待遇还行,做的东西也比較有意思.在南京这个地方,给力的公司不太多,仅仅要是跟亲戚朋友聊到我在南京做IT,无一例外都会问&qu ...
- DelphiXE7中创建WebService(服务端+客户端) good
相关资料:http://www.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...
- [SVN]两个分支合并
Date:2014-1-1 Summary: 记录一下自己使用SVN时候的操作步骤,先吃鱼,再学钓鱼 Contents: 环境:从同事的branch迁出一份代码,作为自己的分支进行开发,同时同事也在自 ...
- [置顶] 大量相关gis资源网盘打包下载
详细请下载附件 所有资源下载(网盘下载): http://laoheitan.bego.cc arcgis教程: http://www.bego.cc/file/23322579 ENVI教程: ht ...