桥接模式:抽象和实现分离,降低耦合度
话不多说,下面直接代码示例: 从高耦合度的逻辑 --》低耦合的逻辑(当然是使用“桥接模式”优化的)
高耦合的代码逻辑:
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);
}
实现同样的功能,经过桥接模式优化后,可扩展性提高了,耦合度降低了!!!!