定义
桥接模式即将 抽象部分 与 实现部分 脱耦,使它们可以独立变化。(真·分而变之😛)
代码原型
代码为 Siki学院 授课实例变体
💻💻💻(C#编码,使用unity引擎)
//假设我们需要使用渲染引擎去绘制一些图形
//将要被绘制的图形抽象出一个基类,其中包含有抽象的渲染引擎的字段。该该类提供给需要被渲染的物体去继承
//将渲染引擎抽象出一抽象类,为了添加新的引擎而做准备。提供个需要实现的引擎去继承
//这样设计,可以让扩展方便,而且图形想用那种方式渲染就用那种方式渲染。
/// <summary>
/// QiaoJIeMoShi 桥接模式
/// </summary>
public class QiaoJIeMoShi:MonoBehaviour
{
private void Start()
{
WGL wGL = new WGL();
OpenGl openGl = new OpenGl();
Shere shere = new Shere();
shere.RenderEngine = wGL;
shere.Draw();
shere.RenderEngine = openGl;
shere.Draw();
}
}
/// <summary>
/// 图形基类
/// </summary>
public class IShape
{
protected string name;//本类图形名称
private IRenderEnging renderEngine;//本类图形使用的渲染引擎
public IRenderEnging RenderEngine
{
get { return renderEngine; }
set { renderEngine = value; }
}
//调用当前渲染引擎的渲染方法
public void Draw()
{
renderEngine.Draw(name);
}
}
//渲染引擎的基类
public abstract class IRenderEnging
{
//渲染物体的方法
public abstract void Draw(string name);
}
/// <summary>
/// 球体的类
/// </summary>
public class Shere:IShape
{
public Shere()
{
name = "球体";
}
}
/// <summary>
/// 正方体的类
/// </summary>
public class Cube:IShape
{
public Cube()
{
name = "正方体";
}
}
/// <summary>
/// 胶囊体的类
/// </summary>
public class Capsule:IShape
{
public Capsule()
{
name = "胶囊体";
}
}
//以下是引擎的实现
/// <summary>
/// 绘制引擎opengl
/// </summary>
public class OpenGl:IRenderEnging
{
public override void Draw(string name)
{
Debug.Log("OpenGL绘制出来了: " + name);
}
}
/// <summary>
/// 绘制引擎wgl
/// </summary>
public class WGL:IRenderEnging
{
public override void Draw(string name)
{
Debug.Log("WGL绘制出来了: " + name);
}
}
优缺点
- 优点:
1,把抽象接口与其实现解耦。
2,抽象和实现可以独立扩展,不会影响到对方。
- 缺点
1,增加了系统复杂度。
用处
该模式的两个抽象类,一个中包含另一个的引用字段,通过该字段使用另一个类的方法。个人觉得最大的在游戏方面的用处,在角色和使用的物品之间可以使用桥接模式。方便角色扩展,以及物品的扩展。如果有大佬有别的建议,欢迎评论。