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

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

hot3.png

背景

    很多情况下继承会带来麻烦,对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性。

1、使用意图

    尽量使用合成聚合,尽量不要使用类的继承。

    将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。

2、生活实例

    手机品牌与应用类别,无论何种手机品牌他里面都应该只聚合抽象应用,这样无论什么手机都能使用各种应用。

3、Java 例子(框架、JDK 、JEE)

    Java中的聚合到处可见

4、模式类图

123029_qD9c_1989321.png

抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。

修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。

具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。

5、模式优点

    合成/聚合原则:尽量使用合成/聚合,尽量不要使用类的继承。

    聚合表示一种弱的拥有关系,虽然是包含关系,但是二者不是严格整体与部分的关系,大雁与雁群的关系;

    合成则是一种强的拥有关系,严格的部分与整体关系,部分和整体的生命周期一样。

    桥接模式:将抽象部分与它的实现部分分离,是他们都可以独立地变化。

    关于实现部分与抽象部分需要看类图以及模式的结构才能彻底清楚,不能简单的理解为抽象就是父类,实现就是子类。

    实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种角度分离出来让他们独立变化,减少他们自己的耦合。

6、与类似模式比较

    桥接模式一种非常优秀的设计模式之一,他把合成/聚合原则使用的淋漓尽致、恰到好处。虽然说继承是面向对象设计的特性之一,可是继承的缺点显而易见,耦合过于紧密,如果使用合成/聚合代替继承,将是是一种不错的解耦。

    之所以叫做桥接模式是因为类图中中间那根线就像一座桥,把二者紧紧的联系在一起。

转载于:https://my.oschina.net/heweipo/blog/469375

你可能感兴趣的文章
[李景山php]每天laravel-20161029|BladeCompiler-1.php
查看>>
》》HTTP 方法:GET 对比 POST《《Java:SpringMVC:基础知识:Http协议()
查看>>
apache 二级域名设置完整步骤
查看>>
个人作业-Alpha项目测试
查看>>
golang下使用ini配置文件(widuu/goini)
查看>>
加载出一个有层次的下拉框
查看>>
SpringBoot整合ssm案例中关于查询
查看>>
ubuntu16.04 安装OpenNI并运行kinnectfusion
查看>>
height百分比失效
查看>>
ext 监听机制
查看>>
通过Maven构建打包Spring boot,并将config配置文件提取到jar文件外
查看>>
哪些网站不适合虚拟主机
查看>>
问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
查看>>
添加交换分区swap
查看>>
[LeetCode]Remove Duplicates from Sorted List解题报告
查看>>
Mongodb主从复制开启安全认证
查看>>
并发编程(十三)—— Java 线程池 实现原理与源码深度解析 之 Executors(三)...
查看>>
步步为营UML建模系列三、用例图(Use Case)
查看>>
正则表达式(一)认识常用字符
查看>>
一个诡异的COOKIE问题
查看>>