C#面向对象设计模式纵横谈
7. Bridge 桥接(结构型模式)
李建忠
jianzhong.lee@gmail.com
上海祝成科技 高级培训讲师
www.sucent.com
抽象与实现
抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
问题在于如果抽象B由于固有的原因,本身并不稳定,也
有可能变化,怎么办?
抽象B ——稳定
实现细节b ——变化
举例来说
假如我们需要开发一个同时支持PC和手机的坦克游戏,游
戏在PC和手机上功能都一样,都有同样的类型,面临同样
的功能需求变化,比如坦克可能有多种不同的型号:T50,
T75, T90……
对于其中的坦克设计,我们可能很容易设计出来一个Tank
的抽象基类,然后各种不同型号的Tank继承自该类:
// 抽象部分
public abstract class Tank {
public abstract Shot();
public abstract Run();
public abstract Trun();
}
//各种实现
public class T50: Tank {……}
public class T75: Tank {……}
public class T90: Tank {……}
另外的变化原因
但是PC和手机上的图形绘制、声效、操作等实现完全不
同…..因此对于各种型号的坦克,都要提供各种不同平台上
的坦克实现:
//PC平台实现
public class PCT50:T50 {……}
public class PCT75: T75 {……}
public class PCT90: T90 {……}
//手机平台实现
public class MobileT50: T50 {……}
public class MobileT75: T75 {……}
public class MobileT90: T90 {……}
这样的设计会带来很多问题:有很多重复代码,类
的结构过于复杂,难以维护,最致命的是引入任何新平
台,比如在TV上的Tank游戏,都会让整个类层级结构复杂
化