7. Bridge Pattern 桥模式

意图:将抽象部分与它的实现部分分离,使它们可以独立地变化。

当一个类有两个或多个发展方向时,比如一个软件A,要有PC版、ios版、安卓版,同时每个版又分为经典版、完美版等。如果单纯使用多继承来实现,就是这样:

这样做的话有两个问题:

1. 类的个数是1+n+n*m个,类很多而且各个经典版本之间很多代码重复

2. 违背单一职责原则,一个类应该只有一个使其变化的原因,而这里有两个,这两个变化产生的类没有分开。

为了解决这两个问题,很容易想到装饰模式,将经典版与PC版的继承关系转换为组合关系,并且因为各个经典版都会和各自的平台类形成组合关系,那么就可以将这个内置对象改为软件A这个类。这样所有经典版都继承自软件A。并且这个内置变量软件A将在运行时被赋值,达到运行时多态的效果。

假设软件A中有5个方法,其中PC/IOS/安卓需要实现父类的5个方法,但是经典版、完美版只需要实现其中三个方法,其他的可以调用PC、ios、安卓版中的方法。那么我们将软件A再一分为二,一个软件A中有两个方法,一个软件B中有三个方法,A中的方法与平台有关,B中的方法与版本有关最后形成的类图:

因为B中有A的变量,这个在运行时被赋值,就像桥一样将两个维度的变化连接了起来。而且当其中一个维度需要增加或减少时,只需要添加类就行,不需要更改,符合开闭原则。

桥模式与装饰模式非常相同,两者都强调单一职责原则,都采用了用组合代替继承实现运行时多态。但是桥模式强调势均力敌的多个发展方向,所以A与B各有自己的方法,装饰模式强调一方修饰另一方,两者的方法差不多,所以在装饰模式中,装饰类需要继承最顶点的抽象类(而桥模式不需要)。

参考:视频去哪了呢?_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值