(学习笔记)设计模式之桥接模式
来源:互联网 发布:指针数组初始化为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(); }如果再添加图形,或者引擎等操作就很简单了。这就是桥接模式。
阅读全文
0 0
- 设计模式学习笔记之桥接模式
- 设计模式学习笔记之(桥接模式brid…
- 设计模式之桥接模式学习笔记
- (学习笔记)设计模式之桥接模式
- 设计模式学习笔记-桥接模式
- 设计模式学习笔记-桥接模式
- 设计模式学习笔记--桥接模式
- 设计模式学习笔记--桥接模式
- 设计模式笔记之---桥接模式
- 设计模式--之桥接模式 笔记
- 设计模式学习之桥接模式
- 学习笔记之设计模式
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记之原型模式
- 设计模式学习笔记之适配器模式
- 学习笔记 ---- 设计模式之观察者模式
- 设计模式之Proxy模式(学习笔记)
- 设计模式之ChainOfResponsibility模式(学习笔记)
- 混合背包——洛谷P1833 樱花
- 算法<删除一个数组中为0的元素>
- 莫队算法 BZOJ 2038 小Z的袜子
- NYOJ 101 两点距离
- 二、SQL语句映射文件(1)resultMap
- (学习笔记)设计模式之桥接模式
- Maven高度自动化构建项目的过程(一)
- ANR 发生及处理
- 数字黑洞
- Qt是什么好玩的
- Android 8.0 Oreo新特性
- [编程题] 跳石板
- C++Primer第五版 第二章练习
- Windows程序设计-宽字符Unicode