桥接模式(Bridge)

1、概述 
桥接模式是一种结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。也可描述为抽象化与实现化解耦,使得二者可以独立变化。
2、重点
核心思想是:将继承模式转化成关联关系,降低了类与类之间的耦合度。将两个角色之间的继承关系修改为关联关系,强关联改换成弱关联。
3、优缺点
优点
  • 分离抽象接口及其实现部分,降低了系统耦合度。
  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统。
  • 实现细节对客户不透明,可以隐藏实现细节。
缺点
  • 桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行编程。
4、场景
  •  一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
  • 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
5、实例
桥梁模式在Java应用中一个非常典型的例子就是JDBC驱动器。JDBC为所有的关系型数据库提供一个通用的界面。一个应用系统动态的选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令。这个过程就是将抽象角色的行为委派给实现角色的过程。
本例也采用数据库连接的一个样例,系统开发中涉及到需要连接多个数据库的问题,假设系统需要同时连接oracle和mysql两种类型数据库:



public interface Driver {
public void connect ();
}

public class OracleDriver implements Driver {
@Override
public void connect () {
System . out . println ( "连接oracle。。。" );
}
}

public class MysqlDriver implements Driver {
@Override
public void connect () {
System . out . println ( "连接mysql。。。" );
}
}

public class Bridge {
private Driver driver ;
public Driver getDriver () {
return driver ;
}
public void setDriver ( Driver driver ) {
this . driver = driver ;
}
}

public class BridgeTest {
public static void main ( String [] args ) {
//oracle
Bridge oracleBridge = new Bridge ();
Driver oracleDriver = new OracleDriver ();
oracleBridge . setDriver ( oracleDriver );
oracleDriver . connect ();
//mysql
Bridge mysqlBridge = new Bridge ();
Driver mysqlDriver = new MysqlDriver ();
mysqlBridge . setDriver ( mysqlDriver );
mysqlDriver . connect ();
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值