設(shè)計(jì)模式之橋接模式

定義:
將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
下面用一個(gè)實(shí)例來說明下這個(gè)模式,例如。我們要繪制三個(gè)圖形,球,正方體和膠囊體,我們用可以使用以下三個(gè)渲染引擎來渲染,OpenGL和DirectX以及SuperRender來渲染這三個(gè)圖形,那么如何來設(shè)計(jì)這個(gè)程序可以使后期增加引擎或者圖像的時(shí)候更加簡(jiǎn)單并且不修改而是擴(kuò)展代碼。下面就來看看下面的UML圖,我們可以在三個(gè)圖形和三個(gè)引擎上分別提取出來一個(gè)父類IShape和IRenderEngine,針對(duì)接口開發(fā)。


image.png

下面是代碼的簡(jiǎn)單實(shí)現(xiàn):

using UnityEngine;

public class DMBridge:MonoBehaviour
{
    private void Start()
    {
        IRenderEngine renderEngine = new DirectX();

        Sphere sphere = new Sphere(renderEngine);
        sphere.Draw();
        Cube cube = new Cube(renderEngine);
        cube.Draw();
        Capsule capsule = new Capsule(renderEngine);
        capsule.Draw();
    }
}
public class IShape
{
    public string Name;
    public IRenderEngine renderEngine;
    public IShape(IRenderEngine renderEngine)
    {
        this.renderEngine = renderEngine;
    }
    
    public  void Draw()
    {
        renderEngine.Draw(Name);
    }
}
//渲染引擎公共基類
public abstract class IRenderEngine
{
    public abstract void Draw(string name);
}

public class Sphere:IShape
{
    
 
    public Sphere(IRenderEngine re) : base(re)
    {
        Name = "Sphere";
    }

}
public class Cube:IShape
{
    public Cube(IRenderEngine re) : base(re)
    {
        Name = "Cube";
    }
}
public class Capsule:IShape
{
    public Capsule(IRenderEngine re) : base(re)
    {
        Name = "Capsule";
    }
}
public class OpenGl:IRenderEngine
{
    public override void Draw(string name)
    {
        Debug.Log("OpenGL繪制出來了:"+name);
    }
}
public class DirectX: IRenderEngine
{
    public override void Draw(string name)
    {
        Debug.Log("DirectX繪制出來了:" + name);
    }
}

將腳本掛在Camera上運(yùn)行可以看到輸出
image.png

如果這時(shí)候如果我想要更換渲染引擎的話就直接將Start方法里面的IRenderEngine修改成如下就OK

IRenderEngine renderEngine = new OpenGl();

image.png

這樣以后修改或者增加功能就會(huì)變的非常的簡(jiǎn)單
橋接模式參考
http://blog.csdn.net/cooldragon/article/details/52173915

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容