zoukankan      html  css  js  c++  java
  • 【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);
         }
     }


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

    若想使用到自己的工程中

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

  • 相关阅读:
    HUST 1584 摆放餐桌
    HUST 1585 排队
    HUST 1583 长度单位
    树状数组 poj2352 Stars
    Visual Studio2013应用笔记---WinForm事件中的Object sender和EventArgs e参数
    倒置输入的数 Exercise07_02
    指定等级 Exercise07_01
    检测密码 Exercise06_18
    一年的天数 Exercise06_16
    数列求和 Exercise06_13
  • 原文地址:https://www.cnblogs.com/fws94/p/7205850.html
Copyright © 2011-2022 走看看