亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Unity游戲開發(fā)中的橋接模式

 更新時(shí)間:2023年05月06日 08:32:13   作者:iukam  
橋接模式是Unity游戲開發(fā)中常用的設(shè)計(jì)模式之一,用于將抽象部分與實(shí)現(xiàn)部分分離,從而使它們可以獨(dú)立地變化。通過橋接模式,不同的抽象類可以與不同的實(shí)現(xiàn)類組合使用,從而實(shí)現(xiàn)更加靈活和可擴(kuò)展的系統(tǒng)設(shè)計(jì)。常見的應(yīng)用包括游戲中的場景渲染、UI界面設(shè)計(jì)、音效播放等

一、使用中介者模式的原因

比如,在實(shí)現(xiàn)較為復(fù)雜的角色和裝備關(guān)系時(shí),將兩種角色(ISoldier和IEnemy)和三種武器(WeaponGun、WeaponRifle和WeaponRocket)交叉組合時(shí),會(huì)存在以下問題:

  • 每當(dāng)要新增角色類時(shí),都要在新的子類中重復(fù)編寫相同的程序代碼,比如每種武器都要實(shí)現(xiàn)對(duì)應(yīng)角色的Fire。
  • 當(dāng)新增武器類型時(shí),所有角色子類中的Attack方法,都必須修改,針對(duì)新的武器類型編寫新的對(duì)應(yīng)程序。同時(shí)也增加了維護(hù)的難度,使得武器類型不容易增加。

要解決上述問題,可以使用橋接模式的設(shè)計(jì)方法。

二、橋接模式的定義

橋接模式是最好應(yīng)用但也是最難理解的,尤其是他的定義不長,其中關(guān)鍵的“抽象與實(shí)現(xiàn)分離”。

中介者模式在GoF中的說明:將抽象與實(shí)現(xiàn)分離,使二者可以獨(dú)立地變化。

三、橋接模式的使用說明

創(chuàng)建一個(gè)橋接模式的結(jié)構(gòu)如圖:

其中的參與者如下:

Abstraction(抽象體接口)

  • 擁有指向Implementor的對(duì)象引用。
  • 定義抽象功能的接口,也可以作為子類調(diào)用實(shí)現(xiàn)功能的接口。

RefinedAbstraction(抽象體實(shí)現(xiàn),擴(kuò)充)

  • 繼承抽象體并調(diào)用Implementor完成實(shí)現(xiàn)功能。
  • 擴(kuò)充抽象體的接口,增加額外的功能。

Implementor(實(shí)現(xiàn)體接口)

  • 定義實(shí)現(xiàn)功能的接口,提供給Abstraction(抽象體)使用。
  • 接口功能可以只有單一的功能,真正的選擇則再由Abstraction(抽象體)的需求加以組合應(yīng)用。

ConcreteImplementorA/B(實(shí)現(xiàn)體)

完成實(shí)現(xiàn)接口上所定義的方法。

四、橋接模式的實(shí)現(xiàn)范例

介紹一個(gè)GoF范例程序如下:

繪圖引擎(實(shí)現(xiàn)體接口和實(shí)現(xiàn)體)

   /// <summary>
    /// 繪圖引擎(實(shí)現(xiàn)體接口和實(shí)現(xiàn)體)
    /// </summary>
    public abstract class RenderEngine
    {
        public abstract void Render(string objName);
    }
    /// <summary>
    /// DirectX 引擎
    /// </summary>
    public class DirectX : RenderEngine
    {
        public override void Render(string objName)
        {
            DXRender(objName);
        }
        public void DXRender(string objName)
        {
            //print "ObjName"
        }
    }
    /// <summary>
    /// OpenGL 引擎
    /// </summary>
    public class OpenGL : RenderEngine
    {
        public override void Render(string objName)
        {
            GLRender(objName);
        }
        public void GLRender(string objName)
        {
            //print "ObjName"
        }
    }

形狀 (抽象接口)

/// <summary>
    /// 形狀 (抽象接口)
    /// </summary>
    public abstract class IShape
    {
        protected RenderEngine renderEngine = null;
        public void SetRenderEngine(RenderEngine renderEngine)
        {
            this.renderEngine = renderEngine;
        }
        public abstract void Draw();
    }

具體形狀的實(shí)現(xiàn)(抽象體接口的子類):

   /// <summary>
    /// 球體
    /// </summary>
    public class Sphere : IShape
    {
        public override void Draw()
        {
            renderEngine.Render("Sphere");
        }
    }
    /// <summary>
    /// 圓柱體
    /// </summary>
    public class Cube : IShape
    {
        public override void Draw()
        {
            renderEngine.Render("Cube");
        }
    }
    /// <summary>
    /// 圓柱體
    /// </summary>
    public class Cylinder : IShape
    {
        public override void Draw()
        {
            renderEngine.Render("Cylinder");
        }
    }

由于RenderEngine將繪圖引擎的功能與使用接口類分離,讓原本依賴實(shí)現(xiàn)的程度降到最低。

五、橋接模式的總結(jié)

橋接模式具備以下優(yōu)點(diǎn):

將抽象與實(shí)現(xiàn)分離,之間的耦合度降到最低,利用游戲后期開發(fā)新增或修改內(nèi)容;

總結(jié):

橋接模式可以將兩個(gè)群組有效地分離,讓連個(gè)群組彼此之間互不影響。這兩個(gè)群組可以是“抽象定義”與“功能實(shí)現(xiàn)”,也可以是兩個(gè)需要交叉合作后才能完成某項(xiàng)任務(wù)的類。

到此這篇關(guān)于Unity游戲開發(fā)中的橋接模式的文章就介紹到這了,更多相關(guān)Unity橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論