Unity代码逻辑C#桥接模式整理

桥接模式:抽象和实现分离,降低耦合度
话不多说,下面直接代码示例: 从高耦合度的逻辑 --》低耦合的逻辑(当然是使用“桥接模式”优化的)
高耦合的代码逻辑:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

public class DM02Bridge : MonoBehaviour
{
    void Start()
    {
        Sphere sphere = new Sphere();
        sphere.Draw();        
        Capusle capusle = new Capusle();
        capusle.Draw();
        Cube cube = new Cube();
        cube.Draw();
        //--------------

        sphere.DrawDX();
        capusle.DrawDX();
        cube.DrawDX();

    }
}



public class Sphere
{
    public string name = "sphere";
    public OpenGL openGL = new OpenGL();
    public DirectX directX = new DirectX();
    public void Draw()
    {
        openGL.Render(name);
    }
    public void DrawDX()
    {
        directX.Render(name);
    }
}
public class Capusle
{
    public string name = "Capusle";
    public OpenGL openGL = new OpenGL();
    public DirectX directX = new DirectX();
    public void Draw()
    {
        openGL.Render(name);
    }
    public void DrawDX()
    {
        directX.Render(name);
    }
}
public class Cube
{
    public string name = "Cube";
    public OpenGL openGL = new OpenGL();
    public DirectX directX = new DirectX();
    public void Draw()
    {
        openGL.Render(name);
    }
    public void DrawDX()
    {
        directX.Render(name);
    }
}
public class OpenGL 
{

    public  void Render(string name) { Debug.Log("OpenGL绘制出来了:" + name); }
}
public class DirectX
{
public  void Render(string name) { Debug.Log("DirectX绘制出来了:" + name); }
}

在上面的设计中,如果添加一个Circle类来实现Draw()的功能,就要和Cube等类似,并且代码的重复率很高;如果新添加一种Render的功能,那么cube,sphere,capusel中都需要修改代码来适应
下面是使用桥接模式优化后的代码,经过桥接模式,代码不重复,最主要是耦合性降低了!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

public class DM02Bridge : MonoBehaviour
{
    void Start()
    {
        // 使用DirectX的render
        IRenderEngine renderEngine = new DirectX();
        // 使用Opengl的render
        //IRenderEngine renderEngine = new OpenGL();
        Sphere sphere = new Sphere("sp", renderEngine);
        sphere.Draw();
        Capusle capusle = new Capusle("capusle", renderEngine);
        capusle.Draw();
        Cube cube = new Cube("cube", renderEngine);
        cube.Draw();
    }
}



public class Sphere : IShape
{
    public Sphere(string na, IRenderEngine re) : base(re)
    {
        name = na;
    }
}
public class Capusle : IShape
{
    public Capusle(string na, IRenderEngine re) : base(re)
    {
        name = na;
    }
}
public class Cube : IShape
{
    public Cube(string na, IRenderEngine re) : base(re)
    {
        name = na;
        Debug.Log("cube 的构造方法 name =" + na);
    }
}

public class OpenGL : IRenderEngine
{

    public override void Render(string name) { Debug.Log("OpenGL绘制出来了:" + name); }
}
public class DirectX : IRenderEngine
{
    public override void Render(string name) { Debug.Log("DirectX绘制出来了:" + name); }
}

public class IShape
{
    public string name;
    public IRenderEngine renderEngine;
    public IShape(IRenderEngine re)
    {
        renderEngine = re;
        Debug.Log("IShape 够着方法 ");
    }
    public void Draw()
    {
        renderEngine.Render(name);
    }
}
public abstract class IRenderEngine
{
    public abstract void Render(string name);
}

实现同样的功能,经过桥接模式优化后,可扩展性提高了,耦合度降低了!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值