BRDIGE(桥接)----对象结构型模式研究 博客分类: 设计模式研究 企业应用SOAP
程序员文章站
2024-03-21 21:56:22
...
前两天对桥接模型进行了研究,以前也有研究就是不用就忘了,今天把它记录下来,供大家分享:要扣字眼,理解桥,桥到底搭在什么地方。
1.意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
用抽象类的方式
代码
Window 类实现:
IconWindow类:
WindowImp类
XWindowImp 类
TransientWindow类
2.动机说明
当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。
所以用桥接进行扩展和修改
用接口的方式
接口IEngine
Car类
Bus类
Limousine 类
DieselEngine类(不同引擎的实现)
GasEngine类(不同引擎的实现)
1.意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
用抽象类的方式
代码
Window 类实现:
public abstract class Window : IconWindow, TransientWindow { public virtual WindowImp WindowImp { get;set; } public abstract void DrawText(); public abstract void DrawCloseBox(); }
IconWindow类:
public class IconWindow { public virtual void DrawBorder() { throw new System.NotImplementedException(); } }
WindowImp类
public abstract class WindowImp { public abstract void DecDrawText(); public abstract void DecDrawLine(); }
XWindowImp 类
public class XWindowImp : WindowImp { public override void DecDrawText() { throw new System.NotImplementedException(); } public override void DecDrawLine() { throw new System.NotImplementedException(); } }
TransientWindow类
public class TransientWindow { public virtual void DrawCloseBox() { throw new System.NotImplementedException(); } }
2.动机说明
当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。
所以用桥接进行扩展和修改
用接口的方式
接口IEngine
public interface IEngine { void Start(); void Stop(); }
Car类
public abstract class Car : IEngine { public virtual object IEngine _engine { get; set; } public Car(object IEngine engine) { } public abstract void Start(); public abstract void Stop(); }
Bus类
public class Bus : Car { public virtual void Bus(object IEngine engine) { throw new System.NotImplementedException(); } public override void Start() { throw new System.NotImplementedException(); } public override void Stop() { throw new System.NotImplementedException(); } }
Limousine 类
public class Limousine : Car { public Limousine (object IEngine engine) { } public override void Start() { throw new System.NotImplementedException(); } public override void Stop() { throw new System.NotImplementedException(); } }
DieselEngine类(不同引擎的实现)
public class DieselEngine : IEngine { public virtual void Start() { throw new System.NotImplementedException(); } public virtual void Stop() { throw new System.NotImplementedException(); } }
GasEngine类(不同引擎的实现)
public class GasEngine : IEngine { public virtual void Start() { throw new System.NotImplementedException(); } public virtual void Stop() { throw new System.NotImplementedException(); } }