目录一、使用中介者模式的原因二、桥接模式的定义三、桥接模式的使用说明四、桥接模式的实现范例五、桥接模式的总结一、使用中介者模式的原因 比如,在实现较为复杂的角色和装备关系时,将两种
比如,在实现较为复杂的角色和装备关系时,将两种角色(ISoldier和IEnemy)和三种武器(WeaponGun、WeaponRifle和WeaponRocket)交叉组合时,会存在以下问题:
要解决上述问题,可以使用桥接模式的设计方法。
桥接模式是最好应用但也是最难理解的,尤其是他的定义不长,其中关键的“抽象与实现分离”。
中介者模式在GoF中的说明:将抽象与实现分离,使二者可以独立地变化。
创建一个桥接模式的结构如图:
其中的参与者如下:
Abstraction(抽象体接口)
RefinedAbstraction(抽象体实现,扩充)
Implementor(实现体接口)
ConcreteImplementorA/B(实现体)
完成实现接口上所定义的方法。
介绍一个GoF范例程序如下:
绘图引擎(实现体接口和实现体)
/// <summary>
/// 绘图引擎(实现体接口和实现体)
/// </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();
}
具体形状的实现(抽象体接口的子类):
/// <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将绘图引擎的功能与使用接口类分离,让原本依赖实现的程度降到最低。
桥接模式具备以下优点:
将抽象与实现分离,之间的耦合度降到最低,利用游戏后期开发新增或修改内容;
总结:
桥接模式可以将两个群组有效地分离,让连个群组彼此之间互不影响。这两个群组可以是“抽象定义”与“功能实现”,也可以是两个需要交叉合作后才能完成某项任务的类。
到此这篇关于Unity游戏开发中的桥接模式的文章就介绍到这了,更多相关Unity桥接模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Unity游戏开发中的桥接模式
本文链接: https://lsjlt.com/news/212639.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0