首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

桥接模式 Bridge

一、概念

当我们在画画的时候,同一幅色彩画,老师需要你用毛笔和蜡笔各画一幅,此时会出现这样的场景:

蜡笔,型号和颜色都在一支笔上,所以需提供 12*3=36 支蜡笔。

毛笔,仅需大中小三种型号毛笔,再提供12个颜料盒,总共 15 个即可。

如果增加一种新信号的画笔,例如超巨大蜡笔和超巨大毛笔,并且也要12种颜色,对应的蜡笔需要增加12支,而毛笔只要增加1支。因为,由上面的蜡笔和毛笔的属性看得出,毛笔的颜色和型号实现了分离,增加新的颜色或者型号对另一方都没有任何影响。

在我们编程的角度来说呢,我们可以认为蜡笔的颜色和型号都存在了耦合性,而毛笔的型号和颜色都很好的拆分将它解耦,使用非常灵活,并且扩展起来也方便,装逼点的说法就是提供了一种设计模式来处理与画笔类似的具有多变化维度的情况,即桥接模式。

桥接模式的定义,将抽象部分与它的实现部分分离,使它们都可以独立地变化。简单来说就是当一个类具有多个变化维度,就通过桥接模式来解耦这些维度。

优点:

1、抽象和实现的分离。

2、优秀的扩展能力。

3、实现细节对客户透明。

缺点:

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

二、运用

角色介绍

抽象部分Abstraction:该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现,该类一般为抽象类。

优化的抽象部分RefinedAbstraction:优化的抽象部分。抽象部分的具体实现,该类一般是对抽象部分的方法进行完善和扩展。

实现部分Implementor:可以为接口或抽象类,其方法不一定要与抽象部分中的一致,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分这些基本操作的业务方法。

实现部分的具体实现ConcreteImplementorA/ConcreteImplementorB:实现部分的具体实现。完善实现部分中方法定义的具体逻辑。

demo分析

Abstraction对应的就是毛笔的抽象对象,具有型号这个属性。

RefinedAbstraction对应的就是具体三种型号的毛笔。

Implementor对应的就是颜料的抽象对象。

ConcreteImplementor对应的就是具体的有不同颜色的颜料。

抽象毛笔(抽象部分)

具体型号毛笔(优化的抽象部分)

通过把 Implementor 类对象当成参数传递给抽象类,这就是桥接模式的核心代码。虽然抽象类与实现类分离了,但是通过这种组合对象的方式,像一座桥一样,又连接了他们。既保持分离带来的互不影响的好处,又有连接一起配合使用的好处。

抽象颜料(实现部分)

具体颜料(具体实现部分)

实现类为抽象类提供了一些基本业务逻辑代码。

test:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G11WL500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券