Unity3D 设计模式之桥接模式

前言


桥接模式的GOF定义:

抽象与实现分离,使二者可以独立地变化

设计模式与游戏完美开发一书用了个例子举例

例子


当角色类有武器这个类的时候。武器类一旦需要变化,那么角色类也就需要变化,而一旦角色类变化,就要给角色类新增加武器类。

Unity3D 设计模式之桥接模式

此时就可以让武器类抽象出来了,给武器类做一个抽象接口类,然后让子类具体实现。此时角色类只需要一个武器接口类,具体内容让武器子类提供

同样,角色类也需要抽象出来,让子类做具体实现。
这里的角色类被抽象出来二次,第一抽象类是角色抽象类,然后再分成了我方士兵抽象类,和敌方士兵抽象类,但是他们会实现武器抽象类,做具体的实现。

使用情况


在什么情况下使用桥接模式?

个人认为:当一个抽象类需要关联依赖’其他类‘实现的时候,如果在抽象类新增一个子类,这个子类也会依赖这个’其他类‘,但是如果这个‘其他类’也是会变化,需要增加新的不同内容(变化较大),这时可以考虑把这个’其他类‘也抽象出来,来做具体的实现。这时候子类就不需要考虑其他类的变化了。具体变化就由‘其他类’子类做实现即可。

其他类可以想成是上文的武器类;
抽象类就是角色类,角色类依赖关联组合武器类;
这也是多态的一种展现形式。

再抽象一下:就是多对多有交叉关联的情况下,可以考虑使用桥接模式,让这个两个群组进行解耦。形成更容易分辨清楚的 1 对1,对多个的使用情况。

如:角色多对应技能多;
如:角色对应使用不同的载具;

作者也给了结论:桥接模式可以将两个群组有效分离,让两个群组彼此相互不受影响。这两个群组可以是抽象定义与功能实现,也可以是两个需要交叉合作后才能完成某些任务的类。