定義:
將抽象部分與它的實(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