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的更多相关文章

  1. BridgePattern(桥接模式)

    /** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...

  2. PHP设计模式(八)桥接模式(Bridge For PHP)

    一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...

  3. 设计模式(八)桥接模式(Bridge Pattern)

    一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视 ...

  4. 设计模式--桥接模式Bridge(结构型)

    一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...

  5. vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!

    现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...

  6. 桥接模式/bridge模式/对象结构型

    意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...

  7. Objective-C 桥接模式 -- 简单实用和说明

    桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的 比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合 然后生成这两个抽象类的实例XBox & ...

  8. C#设计模式-桥接模式

    这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控 ...

  9. C#设计模式系列:桥接模式(Bridge)

    1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...

随机推荐

  1. Cookie不能保存中文解决方式

     在用cookie保存username的时候,发现cookie值不能存中文,报例如以下错: Control character in cookie value, consider BASE64 e ...

  2. 重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)

    dedup util是一款开源的轻量级文件打包工具,它基于块级的重复数据删除技术,可以有效缩减数据容量,节省用户存储空间.目前已经在Sourceforge上创建项目,并且源码正在不断更新中.该工具生成 ...

  3. C#多线程实现方法——Task/Task.Factary

    原文:C#多线程实现方法--Task/Task.Factary Task 使用 Task以及Task.Factory都是在.Net 4引用的.Task跟Thread很类似,通过下面例子可以看到. st ...

  4. 14.6.3 Grouping DML Operations with Transactions 组DML操作

    14.6.3 Grouping DML Operations with Transactions 组DML操作 默认情况下,连接到MySQL server 开始是以启动自动提交模式, 会自动提交每条S ...

  5. COCOS2D-X之帧动画的一种实现Demo

    这个Demo主要是实现帧动画,建议游戏中少用帧动画.废话少说直接上代码. 一.我们直接在COCOS2D-X自带的HelloCpp的工程中添加代码即可.我们在初始化中添加如下代码并附上图片资源. CCS ...

  6. 【虚拟化实战】容灾设计之三Stretched Cluster

    作者:范军 (Frank Fan) 新浪微博:@frankfan7 Stretched Cluster是一把双刃剑,会用的如行云流水,用不好反而受其限制. 传统的vSphere Cluster是指一个 ...

  7. HOJ 2245 浮游三角胞(数学啊 )

    题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2245 Time Limi ...

  8. 设定十分钟android在状态栏上集成的开源project推荐

    1.前言 于android kitkat 有一个新功能可以设置背景的手机状态栏,让手机风的整个界面格是一致的,它看起来非常酷,在今年的google i/o向上android l这样的风格.来如今看我们 ...

  9. hdu1075What Are You Talking About (字典树)

    Problem Description Ignatius is so lucky that he met a Martian yesterday. But he didn't know the lan ...

  10. 14.3.2.4 Locking Reads 锁定读

    14.3.2.4 Locking Reads 锁定读 如果你的查询数据,然后插入或者更新相关的数据 在同一个事务, 普通的SELECT 语句不足以给予足够保护. 其他事务可以更新或者删除相同的你要查询 ...