【设计模式】桥接模式(Bridge Pattern)---分而变之

本文深入解析桥接模式,一种设计模式,它通过分离抽象和实现,使得两者可以独立变化。文章详细介绍了桥接模式的代码原型,包括抽象部分与实现部分的解耦,以及其在游戏开发中的应用实例。桥接模式的优点在于它能有效支持抽象和实现的独立扩展,但同时也增加了系统的复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

桥接模式即将 抽象部分 与 实现部分 脱耦,使它们可以独立变化。(真·分而变之😛)

代码原型

代码为 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,增加了系统复杂度。

用处

该模式的两个抽象类,一个中包含另一个的引用字段,通过该字段使用另一个类的方法。个人觉得最大的在游戏方面的用处,在角色和使用的物品之间可以使用桥接模式。方便角色扩展,以及物品的扩展。如果有大佬有别的建议,欢迎评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄离大人呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值