桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

举个例子,对于笔记本的CPU评测,当安装Intel CPU的时候 评测分数比较高,而安装AMD CPU的时候,则评测分数相对低一些,这个是一唯影响,而配合上电脑品牌,就是二维影响

先看下面的代码

 interface CpuAbility{

      String abilityCpu();
} class AdmCpu implements CpuAbility{ public String abilityCpu() {
// TODO Auto-generated method stub
return "系能一般";
}
}
class IntelCpu implements CpuAbility{
public String abilityCpu() {
// TODO Auto-generated method stub
return "系能比较牛";
}
} abstract class AbstractComputer{ CpuAbility cpuAbility; public AbstractComputer(CpuAbility cpuAbility){
this.cpuAbility=cpuAbility; } public abstract void checkPcAbility(); } class LenevoComputer extends AbstractComputer{ public LenevoComputer(CpuAbility cpuAbility) {
super(cpuAbility);
// TODO Auto-generated constructor stub
} @Override
public void checkPcAbility() {
System.out.println("华硕笔记本CPU性能"+super.cpuAbility.abilityCpu());
} }
class IswComputer extends AbstractComputer{ public IswComputer(CpuAbility cpuAbility) {
super(cpuAbility);
// TODO Auto-generated constructor stub
} @Override
public void checkPcAbility() {
System.out.println("IBM笔记本CPU性能"+super.cpuAbility.abilityCpu());
} }

执行代码并输出

 CpuAbility ability =new IntelCpu();
AbstractComputer computer =new LenevoComputer(ability);
computer.checkPcAbility();
ability =new AdmCpu();//华硕笔记本CPU性能系能比较牛
computer =new IswComputer(ability);
computer.checkPcAbility();//IBM笔记本CPU性能系能一般

可以看到,通过对象组合的方式,Bridge 模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是Bridge模式的本意。

Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

结构如下图所示:

参考地址:

http://blog.csdn.net/jason0539/article/details/22568865

http://hi.baidu.com/isswangqing/item/126e4318bd99a708e65c36b3

http://blog.163.com/xiaokangzhijia@126/blog/static/1659548562010111843618596/

http://www.blogjava.net/wangle/archive/2007/04/25/113545.html

最新文章

  1. Html5 Json应用
  2. 第3月第15天 afconvert lame
  3. Linux下安装OpenCV+Python支持
  4. fgets函数
  5. 关于java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream解决办法
  6. 44、网页启动Activity,网页传值Activity
  7. 关于WIFI DIRECT功能的
  8. 用JAVA中BufferedImage画出漂亮的验证码点击变化
  9. Go 语言基础语法
  10. 利用 c# linq 实现跨数据库的联合查询
  11. 金融量化分析【day112】:因子选股
  12. Oracle初级优化sql
  13. springboot用户登陆密码两次md5加密
  14. portscaner 多线程、多协程并发端口扫描
  15. python第一章:简介与安装--小白博客
  16. ConnectionAbortedError: [WinError 10053] 您的主机中的软件中止了一个已建立的连接
  17. 关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)
  18. 微信小程序中的单位
  19. CentOS 配置SOCKS5代理服务
  20. V$SQLAREA

热门文章

  1. ubuntu 12.04 安装无线网卡驱动
  2. Merge Sorted Array leetcode java(回顾MergeTwoArray和MergeTwoLinkedList)
  3. IntPtr 转 string
  4. 两个JS对象怎样才能相等
  5. 请教如何改善C#中socket通信机客户端程序的健壮性
  6. android 百度地图demo 随感
  7. ListView 设置列对齐方式
  8. https://leetcode-cn.com/
  9. sublime同步侧边栏与窗体的颜色
  10. 内有干货!2个人3个月怎样从零完毕一款社区App《林卡》