【Unity3D与23种设计模式】桥接模式(Bridge)


GoF定义:

“将抽象与实现分离,使二者可以独立的变化”


游戏中,经常有这么一种情况

基类角色类(ICharacter),下面有子类士兵类(ISoldier)、敌军类(IEnemy)

基类武器类(IWeapon),下面有子类枪类(IGun)、炮类(ICannon)


当然,有用枪的士兵,有用炮的士兵

IMG_3106(20170719-143220)

这么一组合,就是2*2 = 4个类

游戏后期,当角色类添加一个角色类时,变成了2*3 = 6个类

若再添加一个武器类,3*3 = 9个类

类成倍数增长

维护起来也就越来越困难


这种两个类群组之间,“交叉组合汇编”的情况

桥接模式是一种解决方法


群组一类中的每一个类,可以使用“群组二类”中的每一个类来实现所定义的功能

IMG_3105(20170719-142928)


using UnityEngine;

public abstract class IWeapon{
     public abstract void DamageValue(ICharacter character);
 }

public class IGun : IWeapon {
     public override void DamageValue(ICharacter character)
     {
         Debug.Log("Gun");
     }
 }

public class ICannon : IWeapon {
     public override void DamageValue(ICharacter character)
     {
         Debug.Log("Cannon");
     }
 }

public abstract class ICharacter {
     protected IWeapon m_Weapon = null;

    public void SetWeapon(IWeapon theWeapon) {
         m_Weapon = theWeapon;
     }

    public abstract void InstantiateCharacter();
 }

public class ISoldier : ICharacter {
     public override void InstantiateCharacter()
     {
         m_Weapon.DamageValue(this);
     }
 }

public class IEnemy : ICharacter {
     public override void InstantiateCharacter()
     {
         m_Weapon.DamageValue(this);
     }
 }


上面代码只为演示桥接模式设计思想使用

若想使用到自己的工程中

还需结合自己工程写出代码

posted on 2017-07-19 15:02  Lumious  阅读(847)  评论(0)    收藏  举报

导航