• 【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);
         }
     }


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

    若想使用到自己的工程中

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

  • 相关阅读:
    物料清单概述
    java开发webservice的1种方式
    java web service简单示例
    IOS证书过期
    Windows 2012 R2 安装net4.6.1
    sqlserver 性能调优脚本
    solidty--owner.sol
    ERC20-USDT
    EOS 公开节点及自有节点部署
    微信第三方平台授权流程
  • 原文地址:https://www.cnblogs.com/fws94/p/7205850.html
Copyright © 2020-2023  润新知