(学习笔记)设计模式之桥接模式

来源:互联网 发布:指针数组初始化为null 编辑:程序博客网 时间:2024/04/28 03:38

桥接模式可以应用于不同的不同种类事物之间相互联系的条件下。比如不同的角色可以使用不同的武器,此时就可以使用桥接模式。

例如:

有几种图形cube,Cpasule需要绘制,此时有个绘制工具OpenGL;

通用方法为:

绘制工具:

public class OpenGL//绘制引擎1号{    public void Render(string name)    {        Debug.Log("OpenGL绘制出来了" + name);    }}
public class DirecetX//绘制引擎2号{    public void Render(string name)    {        Debug.Log("DirectX绘制出来了" + name);    }}
图形类
   public class Sphere//球    {        public string name = "Sphere";        public OpenGL openGL = new OpenGL();//为了让球有自我绘制的功能    public DirecetX direcetX = new DirecetX();//绘制引擎2号    public void DrawDX()//    {        direcetX.Render(name);    }        public void Draw()        {            openGL.Render(name);        }    }    public class Cube//球    {        public string name = "Cube";        public OpenGL openGL = new OpenGL();//为了让球有自我绘制的功能    public DirecetX direcetX = new DirecetX();//绘制引擎2号    public void DrawDX()//    {        direcetX.Render(name);    }    public void Draw()        {            openGL.Render(name);        }    }    public class Capsule//胶囊体    {        public string name = "Capsule";        public OpenGL openGL = new OpenGL();//为了让球有自我绘制的功能    public DirecetX direcetX = new DirecetX();//绘制引擎2号    public void DrawDX()//    {        direcetX.Render(name);    }    public void Draw()        {            openGL.Render(name);        }    }
客户端调用:
  private void Start()    {        Sphere sphere = new Sphere();        sphere.Draw();        Cube cube = new Cube();        cube.Draw();        Capsule capsule = new Capsule();        capsule.Draw();    }

此时在客户端调用不同的引擎绘制图形的时候就需要调用图形里面不同的绘制方法,如果再增加一个引擎,又要修改很多代码,所以很麻烦。

图形类和引擎类里面都有很多相似的代码,可以提取出来的。

因此可以声明两个类保存重复代码

public class IShape//图形类{    public string name;    public RenderEngine renderEngine;//引擎    public void Draw()    {        renderEngine.draw(name);    }    public IShape(RenderEngine renderEngine)    {        this.renderEngine = renderEngine;    }}public abstract class RenderEngine//引擎类{    public abstract void draw(string name);}
图形类,引擎类只需要继承就好了

 public class Sphere:IShape//球    {    public Sphere(RenderEngine re) : base(re)    {        name = "Sphere";    }    }    public class Cube:IShape//球    {        public Cube(RenderEngine re):base(re)    {        name = "Cube";    }    }    public class Capsule:IShape//胶囊体    {    public Capsule(RenderEngine re):base(re)    {        name = "Cube";    }    }public class OpenGL:RenderEngine//绘制引擎1号{    public override void draw(string name)    {        Debug.Log("OpenGL绘制出来了" + name);    }}public class DirecetX:RenderEngine//绘制引擎2号{    public override void draw(string name)    {        Debug.Log("DirectX绘制出来了" + name);    }}
客户端调用

    private void Start()    {        RenderEngine renderEngine = new OpenGL();        IShape sphere = new Sphere(renderEngine);        sphere.Draw();    }
如果再添加图形,或者引擎等操作就很简单了。这就是桥接模式。








原创粉丝点击