第十七篇:桥接模式

来源:互联网 发布:淘宝店标制作网站 编辑:程序博客网 时间: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(这是个抽象)类相分离,而独自形成一个品牌类,从而达到多维度扩展的目的!





1 0
原创粉丝点击