最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

二、橋接模式的定義

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

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

三、橋接模式的使用說明

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

其中的參與者如下:

Abstraction(抽象體接口)

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

RefinedAbstraction(抽象體實現(xiàn),擴充)

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

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

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

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

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

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

介紹一個GoF范例程序如下:

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

   /// <summary>
    /// 繪圖引擎(實現(xiàn)體接口和實現(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();
    }

具體形狀的實現(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將繪圖引擎的功能與使用接口類分離,讓原本依賴實現(xiàn)的程度降到最低。

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

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

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

總結(jié):

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

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

相關(guān)文章

  • c# 使用OpenCV識別硬幣

    c# 使用OpenCV識別硬幣

    這篇文章主要介紹了c# 使用OpenCV識別硬幣的方法,幫助大家更好的利用c#進行深度學習,感興趣的朋友可以了解下
    2020-12-12
  • 總結(jié)C#刪除字符串數(shù)組中空字符串的幾種方法

    總結(jié)C#刪除字符串數(shù)組中空字符串的幾種方法

    C#中要如何才能刪除一個字符串數(shù)組中的空字符串呢?下面的文章會介紹多種方式來實現(xiàn)清除數(shù)組中的空字符串,以及在.net中將字符串數(shù)組中字符串為空的元素去除。
    2016-08-08
  • C#從foreach語句中枚舉元素看數(shù)組詳解

    C#從foreach語句中枚舉元素看數(shù)組詳解

    這篇文章主要給大家介紹了關(guān)于C#從foreach語句中枚舉元素看數(shù)組的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • C#不改變圖像長寬比例調(diào)整圖像大小方式

    C#不改變圖像長寬比例調(diào)整圖像大小方式

    文章介紹了在UI顯示圖片時,當容器大小固定而圖片尺寸大于容器時,可以通過編碼計算長寬來重繪圖像,以確保圖像的長寬比例不變,C#代碼示例展示了如何在Winform前端實現(xiàn)這一功能
    2025-01-01
  • C#使用CallContext緩存線程數(shù)據(jù)

    C#使用CallContext緩存線程數(shù)據(jù)

    這篇文章介紹了C#使用CallContext緩存線程數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)身份證驗證功能的示例代碼

    C#實現(xiàn)身份證驗證功能的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)身份證驗證功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • c#計算某段代碼的執(zhí)行時間實例方法

    c#計算某段代碼的執(zhí)行時間實例方法

    在本篇文章里我們給大家整理了關(guān)于c#計算某段代碼的執(zhí)行時間的方法和經(jīng)驗,有興趣的朋友們學習下。
    2019-02-02
  • C#圖片處理類分享

    C#圖片處理類分享

    這篇文章主要為大家分享了C#圖片處理類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 基于C#實現(xiàn)Windows服務狀態(tài)啟動和停止服務的方法

    基于C#實現(xiàn)Windows服務狀態(tài)啟動和停止服務的方法

    這篇文章主要介紹了基于C#實現(xiàn)Windows服務狀態(tài)啟動和停止服務的方法,詳細講述了實現(xiàn)這一功能的具體步驟,代碼簡潔易懂,需要的朋友可以參考下
    2014-09-09
  • C#實現(xiàn)二叉排序樹代碼實例

    C#實現(xiàn)二叉排序樹代碼實例

    今天小編就為大家分享一篇關(guān)于C#實現(xiàn)二叉排序樹代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論

印江| 广州市| 丹东市| 通州市| 托克逊县| 文登市| 横山县| 垣曲县| 云霄县| 瑞昌市| 平江县| 盐津县| 南阳市| 清新县| 大荔县| 绥阳县| 九寨沟县| 广元市| 罗源县| 滦南县| 林周县| 宁乡县| 盐城市| 临夏县| 鲁山县| 仪征市| 泸州市| 喀喇沁旗| 瑞丽市| 华容县| 军事| 祁东县| 镇赉县| 马关县| 三河市| 常宁市| 布尔津县| 甘南县| 云南省| 冷水江市| 长治县|