定义:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
下面用一个实例来说明下这个模式,例如。我们要绘制三个图形,球,正方体和胶囊体,我们用可以使用以下三个渲染引擎来渲染,OpenGL和DirectX以及SuperRender来渲染这三个图形,那么如何来设计这个程序可以使后期增加引擎或者图像的时候更加简单并且不修改而是扩展代码。下面就来看看下面的UML图,我们可以在三个图形和三个引擎上分别提取出来一个父类IShape和IRenderEngine,针对接口开发。
下面是代码的简单实现:
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上运行可以看到输出如果这时候如果我想要更换渲染引擎的话就直接将Start方法里面的IRenderEngine修改成如下就OK
IRenderEngine renderEngine = new OpenGl();
这样以后修改或者增加功能就会变的非常的简单
桥接模式参考
http://blog.csdn.net/cooldragon/article/details/52173915