博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(十一)桥接模式
阅读量:5883 次
发布时间:2019-06-19

本文共 2153 字,大约阅读时间需要 7 分钟。

概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.

应用场景

  • 实现系统可能有多个角度分类,每一种角度都可能变化.

解释:桥接模式将继承模式转化成关联关系,他降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量.

理解抽象化,实现化,解耦

  • 抽象化:将复杂物体的一个或几个共同的特性抽出去而只注意其他特性的行动或过程.在java面向对象中抽象化就是将对象的共同性质抽取出去形成类的过程.
  • 实现化:针对抽象化给出的具体实现,它和抽象化是一个互逆的过程,实现化是对抽象化事物的进一步具体化.
  • 解耦:解耦是将抽象化和实现化之间的耦合关系解脱开,或者说是将他们之间的强关联改换成弱关联.将两个角色之间的继承关系修改为关联关系.

优点

  • 分离抽象接口及其实现部分.提高了比继承更好的解决方案.
  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统.
  • 实现细节对客户不透明,可以隐藏实现细节.

缺点

桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行编程.

代码实现 示例:在开发中可能不止使用一种数据库, 例如Mysql,SqlServer数据库等,现在使用桥接模式创建一个连接数据库的驱动,然后对每一个数据库提供各自的实现.对于使用某一个数据库的时候只需要切换一下就行.

类图

数据库接口

package Bridge; /** * Created by looper on 2017/8/16. */public interface Driver {  public void connect();}复制代码

Mysql数据库实现类

package Bridge;/** * Created by looper on 2017/8/16. */public class MysqlDriver implements Driver {  @Override  public void connect() {    System.out.println("连接Mysql数据库");  }}复制代码

SqlServer数据库实现类

package Bridge; /** * Created by looper on 2017/8/16. */public class SqlServerDriver implements Driver {  @Override  public void connect() {    System.out.println("连接SQLServer数据库");  }}复制代码

桥梁类(抽象类)

package Bridge; /** * Created by looper on 2017/8/16. */public abstract class Bridge {  private Driver driver;   public void connect(){    driver.connect();  }   public void setDriver(Driver driverTemp){    this.driver = driverTemp;  }   public Driver getDriver(){    return this.driver;  }}复制代码

桥梁类(实现类)

package Bridge; /** * Created by looper on 2017/8/16. */public class MyBridge extends Bridge { }复制代码

测试类

package Bridge; /** * Created by looper on 2017/8/16. */public class BridgeTest {  public static void main(String[] args) {    Bridge mysqlBridge = new MyBridge();     Driver mysqlDriver = new MysqlDriver();    mysqlBridge.setDriver(mysqlDriver);    mysqlBridge.connect();     Driver sqlServerDriver = new SqlServerDriver();    mysqlBridge.setDriver(sqlServerDriver);    mysqlBridge.connect();   }}复制代码

输出:

桥接模式与适配器模式在代码实现上是相同的。差别在于适配器模式是已经有一个进水管和家用水龙头存在了,这时候生产一个接头来连接进水管和水龙头,这个接头就是适配器。桥接是定下生产接头策略,再让进水管有开发的自由度。只是先后的问题。

note:见者易,学者难;莫将容易得,便作等闲看

转载于:https://juejin.im/post/5ccedceef265da03b36efa3b

你可能感兴趣的文章
shell变量
查看>>
Dom基础
查看>>
软件工程敏捷开发04
查看>>
中国传媒大学李兴国:高清技术放大电影梦幻特质
查看>>
PHP数组大全
查看>>
html基本语法
查看>>
静态绑定和动态绑定;位拷贝和值拷贝
查看>>
raw_input与input的区别
查看>>
【BZOJ】3302: [Shoi2005]树的双中心 && 2103: Fire 消防站 && 2447: 消防站
查看>>
NSPredicate
查看>>
解决Spring和SpringMVC扫描注解类的冲突问题
查看>>
Java API —— Pattern类
查看>>
Oracle SQL 关键字
查看>>
git与GitHub(二)
查看>>
《关键链》读后感
查看>>
C++ enum类型
查看>>
昨日股市暴跌熔断 赵薇亏3.3亿赔惨了(如何预测今年股市走向)
查看>>
输入法评价
查看>>
linux中的阻塞机制及等待队列【转】
查看>>
给你的Linux系统上点stress【转】
查看>>