桥接模式讲解

现在我们来学习一下桥接模式,桥接模式的定义和类型,那桥接模式的定义是说,将抽象部分和他的具体实现部分分离,

是他们都可以独立的变化,独立的变化就是在一定程度上进行解耦,那通过组合的方式呢,建立两个类之间的联系,而不是

使用继承,类型是结构型,那桥接的英文是bridge,桥梁,也就是说将桥梁的两侧,连接起来,桥接模式从bridge来进行命名的,

目的就是为了两个不同的类之间建立某种联系,那两个类建立的关系方式有很多,我们可以通过继承,同样也可以通过组合,

那桥接模式就是通过组合,采用组合的方式,来建立两个类之间的关系,那我们之前也学习过,复用原则,这个原则推荐我们

使用组合,而不是使用继承,桥接模式还可以防止子类过多,也就是类爆炸的这种情况,那桥接模式的重点,就是理解里面的抽象的部分,

和他的具体实现部分,那抽象部分就要经过抽象化,所谓抽象化,就是忽略一些信息,把不同的实体当做同样的实体对待,在面向对象中,

我们讲对象的共同性质,抽取出来,形成类的过程,这个过程就叫做抽象化的过程,那对于具体实现部分呢,我们也要进行实现化,给出

具体的实现,那这个过程就是具体的实现过程,而这个过程的就是具体的实现部分,那具体实现的部分,是比抽象产生的更具体,具体化的

产物,打个比方,现在我们要实现一个跨平台的一个播放器,我操作系统上有Linux,

有linux还有mac,那在操作系统级别,就分好多操作系统,然后他还可以播放很多格式的文件,例如MP4,RMVB,AVI,那这种情况我们就要使用

桥接模式,来设计这种跨平台多种视频格式的播放器,那我们来看一下桥接模式的适用场景,首先在抽象和具体实现之间需要增加更多灵活性

的时候,这个场景适合使用桥接模式,那使用桥接模式就可以避免在这两个层次之间呢,建立静态的继承关系,通过桥接模式,使他们之间建立

一层关联关系,另外抽象部分,和具体的实现部分,他们两个都可以以继承的方式,独立扩展,而且互不影响,就可以将一个动态的抽象类的

子类的对象,和一个具体实现化的子类对象,进行组合,那我们系统对抽象化的角色,能够具体实现化的角色,也就实现了解耦,还有一个类

存在两个或多个独立变化的维度,并且这两个或者多个呢都需要独立的进行扩展,那这个呢也非常好理解,也就是说抽象的部分独立的扩展,

具体实现的也可以独立的扩展,还有不希望使用继承,因为多继承导致系统类的个数剧增,这种场景也非常适用于桥接模式

那我们来看一下桥接模式有什么优点呢,首先我们来看一下最大的优点,分离抽象部分,以及具体实现部分,

那桥接模式的目标,正是这个,那因为桥接模式使用了组合,也就是对象间的关联关系,来解耦了抽象和实现之间,

固有的绑定关系,使抽象和实现呢可以沿着各自的维度来变化,来扩展,那大白话来说,抽象和实现他们两个不再

继承层次结构中,从而通过组合,来获得多维度的组合对象,那桥接模式第二个优点呢,提高了系统的可扩展性,

一旦理解了第一个优点呢,那这个就非常好理解了,因为在两个变化维度中,需该原有的系统,同时使用复合,

来符合合成复用原则

咱们再看一下桥接模式的缺点是什么呢,增加了系统的理解和设计难度,那很简单,类与类之间建立了抽象层,

我们在编码的时候,一开始就要针对抽象层进行设计和编程,另外一个需要正确的识别出系统中两个独立变化的维度,

因此桥接模式的使用范围,还是具有一定局限性的,也就是和我们的业务场景息息相关的,那在正确识别这两个独立维度的时候,

也需要一定的经验积累

那桥接模式的相关模式,首先桥接模式和组合模式,组合模式强调的是部分和整天间的组合,

而桥接模式是平行级别上同类的组合,然后其实是桥接模式和适配器模式,这两个模式是有一个共同点,

桥接模式和适配器模式呢,都是为了让两个东西配合工作,那他们两个的目的呢又不一样,适配器模式是改变已有的接口,

让他们之间可以相互配合,而桥接模式是分离抽象和具体的实现,他的目的就是分离,也就是说适配器模式,可以把功能上

相似,但是接口不同的类,适配起来,而桥接模式是把类的抽象,和类的具体实现,分离开,然后在此基础上呢,使这些层次

结构结合起来,然后我们一起来coding,然后看一下桥接模式的UML

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/90608657