桥接模式

这是两个维度的变化。抽象层次会改变,实现层次也会改变。结构型模式,是对象间的组合关系。桥接模式解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。不同的抽象结合不同的实现对象,组合成不同的新功能对象。

面临问题:

一个抽象类的派生类必须使用多个实现,但是却不能出现类数量的爆炸性增长。

举例来说,假设现在我们需要为某个餐厅制造菜单,餐厅供应牛肉面、猪肉面……,而且顾客可根据自己的口味选择是否添加辣椒。此时就产生了一个问题,我们如何来应对这种变化:我们是否需要定义辣椒牛肉面、无辣牛肉面、辣椒猪肉面、无辣猪肉面4个子类?如果餐厅还供应羊肉面、韭菜面……呢?如果添加辣椒时可选择无辣、微辣、中辣、重辣……风味呢?那程序岂非一直忙于定义子类?

解决方案:

为所有实现定一个接口,供抽象类的所有派生类使用。是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

对于上面的例子来说,实现类有不同的辣椒口味,是一个维度的变化,需要定义一个辣椒的接口。抽象类的派生类是不同材质的面条。抽象面条类,包含了辣椒这个属性,所以面条实现了在辣椒这方面的维度的变化。但是面条又有不同的派生类,不同的派生类实现又代表了另一个维度的变化。所以再最后的面条实现类时,可以根据选择实现两个维度的变化。


 Abstraction
 定义抽象类的接口
 维护一个指向Implementor类型对象的指针
 RefinedAbstraction
扩充由Abstraction定义的接口
 Implementor
 定义实现类的接口,不一定要与Abstraction的接口完
全一致,甚至可以完全不同
 ConcreteImplementor
实现Implementor接口并定义它的具体实现




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值