转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711

桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使他们能够各自独立的变化。如果你的电脑是双系统(WinXP、Win7)。并且都安装了mysql、oracle、sqlserver、DB2这4种数据库,那么你有2*4种选择去连接数据库。按寻常的写法。咱要写2*4个类。可是使用了桥接模式,你仅仅需写2+4个类,能够看出桥接模式事实上就是一种将N*M转化成N+M组合的思想。

一、uml建模:

二、代码实现

/**
* 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使他们能够各自独立的变化。
*
* 如果你的电脑是双系统(WinXP、Win7)。并且都安装了mysql、oracle、sqlserver、DB2这4种数据库
*
* 那么你有2*4种选择去连接数据库。 按寻常的写法。咱要写2*4个类,可是使用了桥接模式,你仅仅需写2+4个类
*
* 能够看出桥接模式事实上就是一种将N*M转化成N+M组合的思想。 */
interface Driver {
public void method();
} class MysqlDriver implements Driver { @Override
public void method() {
System.out.println("use mysql driver to connection db...\n");
}
} class OracleDriver implements Driver { @Override
public void method() {
System.out.println("use oracle driver to connection db...\n");
}
} /**
* 这里你还能够写SqlserverDriver、DB2Driver...
*/ abstract class Computer {
public abstract void connection(Driver driver);
} class WinXP extends Computer {
@Override
public void connection(Driver driver) {
System.out.println("WinXP Computer");
driver.method();
}
} class Win7 extends Computer {
@Override
public void connection(Driver driver) {
System.out.println("Win7 Computer");
driver.method();
}
} /**
* client測试类
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
/**
* 第一种组合:winXP使用mysql驱动连接数据库
*/
Computer winxp = new WinXP();
winxp.connection(new MysqlDriver());
/**
* 另外一种组合:win7使用mysql驱动连接数据库
*/
Computer win7 = new Win7();
win7.connection(new MysqlDriver());
/**
* 第三种组合:winXP使用oracle驱动连接数据库
*/
Computer cwinxp = new WinXP();
cwinxp.connection(new OracleDriver());
/**
* 第四种组合:winXP使用oracle驱动连接数据库
*/
Computer cwin7 = new Win7();
cwin7.connection(new OracleDriver()); }
}

三、总结

桥接的核心思想是:将抽象化与实现化解耦,使得二者能够独立变化。

最新文章

  1. ABP框架 - 会话
  2. EntityFramework Core 封装
  3. hdu 4753 2013南京赛区网络赛 记忆化搜索 ****
  4. android: 通过内容提供器读取系统联系人
  5. The file 'MemoryStream' is corrupted! 的解决办法
  6. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目
  7. 关于static/const的作用
  8. 第三次阅读赵炯博士的《linux内核代码完全注释》:序
  9. 深入理解javascript中的闭包!(转)
  10. Java NIO--初步认识
  11. 服务器三:多线程epoll
  12. 剑指Offer全解
  13. shell脚本中单双引号疑惑
  14. ORACLE 存储过程中保存用户自定义异常信息的一种方式
  15. 防止重复提交demo
  16. jQuery中兄弟元素、子元素和父元素的获取
  17. JavaScript排序,不只是冒泡
  18. plpgsql insert 性能 测试
  19. 算法-基数排序(radix sort)
  20. CSS特性:white-space: nowrap;text-overflow: ellipsis;text-decoration: none

热门文章

  1. 三、ansible简要使用
  2. MySQL之正则表达式
  3. linux sed命令查询结果前后批量追加内容(html文件批量修改css,js等文件路径)
  4. 以Docker容器方式安装Ceph
  5. Hadoop案例(七)MapReduce中多表合并
  6. python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
  7. linux 驱动程序 HelloWorld
  8. 2017 计蒜之道 初赛 第五场 D. UCloud 的安全秘钥(困难)
  9. open -python操作文件
  10. maven-surefire-plugin插件