第十七篇:桥接模式
来源:互联网 发布:淘宝店标制作网站 编辑:程序博客网 时间:2024/06/18 09:20
说在开头:我并不认为这是什么设计模式,正常人就应该是这么思考的...不过书上既然都有写,我也就随意说一下吧!
此模式主要通过组合与聚合的方式用来解决复杂的类关系问题,通过抽象出多个类,从多个维度来描述解决问题,从而让混乱的类关系结构变得清晰;
先说下组合与聚合的概念;
组合:用来描述必须有的一种关系,比如鸟儿必须有翅膀!否则就无法诞生鸟儿对象!
聚合:用来描述一种可有可无的关系,比如你不一定要有钱...没钱你也可以存在...(我咋感觉我说这话有点违背良心呢...没钱还怎么活!快给我点钱吧!我薪水好低我好穷的!)
然后我们先来下个定义;
桥接模式:用来将抽象部分与它的实现部分相分离,使它们可以独立的变化!这是什么意思呢?别急,往下看!
假设现在需要你来设计一个电脑对象:
你可能是这样来设计的:
//电脑父类 ,为了节省代码,我不写属性了!class Computer{}//现在要你加入联想品牌电脑class ThinkComputer extends Computer{}//现在要你加入惠普品牌电脑class HpComputer extends Computer{}//现在要你加入是联想品牌且有着技嘉主板的电脑class gigabyteComputer extends ThinkComputer{}//现在要你加入是联想品牌且有着华硕主板的电脑class AsusComputer extends ThinkComputer{}//现在要你加入是惠普品牌且有着华硕主板的电脑class AsusHpComputer extends HpComputer{}//现在要你加入是联想品牌且有着技嘉主板且有着安钛克电源的电脑class gigabyteAntedcComputer extends gigabyteComputer{}//现在要你加入有着...且有着xxx显卡的电脑...//oh my gad ...完全没法玩了,这类层次根本看不下去了!我们来看一下类图:
什么也不多说,这种思维可行吗?完全是错的嘛!后期我们还有各种各样的电脑需要创建,还需要不断的通过继承来扩展类,可想而知,后期的类关系该是有多么复杂!
而我们正常思维逻辑是,品牌,主板,电源...等等应该形成单独的类,有单独的关系,而电脑拥有着主板,电源,那就采用组合将其集成进去不就行了嘛!
Ok,我们来用正常思维改动一下代码吧!
//电脑父类 class Computer{//拥有着品牌属性private Brand brand;private MainBoard mainBoard;//可以继续电源...显卡...}//品牌父类class Brand{}//联想品牌class Think extends Brand{}//惠普品牌class Hp extends Brand{}//主板父类class MainBoard{}//技嘉主板class Gigabyte extends MainBoard{}//华硕主板class Asus extends MainBoard{}我们来看一下改写后的类图:
你看,我们随意这么一改,它就是桥接模式了!
可以看到,通过将品牌,主板等维度抽离出来,形成单独的类,不仅减少了类的数量还让整个类关系层次变得简单明了,现在想要创建不同的电脑就变得非常简单了,只需要在不同维度上添加新的子类就可以了!
回到开始说的定义,将抽象部分与实现部分相分离,意思就是,这里的实现指的是联想品牌电脑等对象...通过将联想品牌(这是个实现)与Computer(这是个抽象)类相分离,而独自形成一个品牌类,从而达到多维度扩展的目的!
- 第十七篇:桥接模式
- 第十七篇 设计模式--命令模式
- 第十七章 适配器模式
- 第十七
- 第十七章之Activity的启动模式
- 第十七节多线程及生产者消费者模式
- 第十七篇 EPON注册过程
- 第十七篇 简单的自我介绍
- 设计模式C++版:第十七式原型模式
- 第十七章 在看NBA需要翻译--适配器模式(读书笔记)
- js 设计模式 第十七章 Chain of Responsibility
- 第十七篇 黑马程序员-Java高新技术
- 第十七篇 --ANDROID DisplayManager 服务解析一
- 第十七篇:计算代码行数练习代码
- 第十七篇:C语言源代码精选网站
- 第十七篇【测试数据准备的那些事儿】
- C语言第十七篇:size_t 数据类型
- 第十七篇 zabbix报警媒介介绍
- opencv findContour的 方法比较记录
- B1037. 在霍格沃茨找零钱(20)
- Unity3D说明文档翻译-Gameplay in 2D
- 并发编程实战学习笔记(七)——避免活跃性问题
- dubbo学习笔记2 简单的Application形式 dubbo服务搭建 消费者
- 第十七篇:桥接模式
- Mycat概述
- B1038. 统计同成绩学生(20)
- 算法设计与应用基础-第五周
- 待解决:selenium 未能获取alert!记录,期待大家指导!
- 栈之顺序栈
- 线性表介绍
- UIControl介绍以及Target-Action机制
- Unity 游戏存档 PlayerPrefs类的用法