Unity游戲開發(fā)中的橋接模式
一、使用中介者模式的原因

比如,在實現(xiàn)較為復雜的角色和裝備關系時,將兩種角色(ISoldier和IEnemy)和三種武器(WeaponGun、WeaponRifle和WeaponRocket)交叉組合時,會存在以下問題:
- 每當要新增角色類時,都要在新的子類中重復編寫相同的程序代碼,比如每種武器都要實現(xiàn)對應角色的Fire。
- 當新增武器類型時,所有角色子類中的Attack方法,都必須修改,針對新的武器類型編寫新的對應程序。同時也增加了維護的難度,使得武器類型不容易增加。
要解決上述問題,可以使用橋接模式的設計方法。
二、橋接模式的定義
橋接模式是最好應用但也是最難理解的,尤其是他的定義不長,其中關鍵的“抽象與實現(xiàn)分離”。
中介者模式在GoF中的說明:將抽象與實現(xiàn)分離,使二者可以獨立地變化。
三、橋接模式的使用說明
創(chuàng)建一個橋接模式的結構如圖:

其中的參與者如下:
Abstraction(抽象體接口)
- 擁有指向Implementor的對象引用。
- 定義抽象功能的接口,也可以作為子類調用實現(xiàn)功能的接口。
RefinedAbstraction(抽象體實現(xiàn),擴充)
- 繼承抽象體并調用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)的程度降到最低。
五、橋接模式的總結
橋接模式具備以下優(yōu)點:
將抽象與實現(xiàn)分離,之間的耦合度降到最低,利用游戲后期開發(fā)新增或修改內容;
總結:
橋接模式可以將兩個群組有效地分離,讓連個群組彼此之間互不影響。這兩個群組可以是“抽象定義”與“功能實現(xiàn)”,也可以是兩個需要交叉合作后才能完成某項任務的類。
到此這篇關于Unity游戲開發(fā)中的橋接模式的文章就介紹到這了,更多相關Unity橋接模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#在DataTable中根據條件刪除某一行的實現(xiàn)方法
我們通常的方法是把數(shù)據源放在DataTable里面,但是偶爾也會需要把不要的行移除,怎么實現(xiàn)呢,下面通過代碼給大家介紹c# atatable 刪除行的方法,需要的朋友一起看下吧2016-05-05
UnityShader使用Plane實現(xiàn)翻書效果
這篇文章主要為大家詳細介紹了UnityShader使用Plane實現(xiàn)翻書效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
C#實現(xiàn)Excel轉PDF時設置內容適應頁面寬度
將Excel轉為PDF格式時,通常情況下轉換出來的PDF頁面都是默認的寬度大小。所以本文提供了C#實現(xiàn)Excel轉PDF時設置內容適應頁面寬度的示例代碼,需要的可以參考一下2022-04-04

