代码改变世界

Bridge学习笔记

2007-08-27 21:35  buru  阅读(200)  评论(0)    收藏  举报
精神: 抽象不应该依赖于实现细节,实现细节应该依赖于抽象.
只要是面向对象语言,组合一定必继承好.
另外一种变化原因:平台的变化
比如 PC上以及手机Tank游戏的图形绘制,生效,操作等实现完全不同.怎么办?

放在一个动态的环境中做软件设计.

动机:
思考,事实上Tank类的固有逻辑,使tank有两个变化的维度---平台变化,型号变化.
如何应对?
意图:抽象部分与现实部分分离,使它们都可以独立地变化.
public abstract class Tank
{
public abstract void Shot();
public abstract void Run();
public abstract void Stop();
}
public class T50:Tank
{
//...
}
public class T90:Tank
{
//...
}

---------这样设计是不够地.

又 public class PCT50:T50
{
//...
}
public class MobileT50:T50
{
//...
}
-------------------add:
public abstract class TankPlatformImplementation
{
public abstract void MoveTankTo(Pint to);

public abstract void DrawTank();

public abstract void DoShot();

public absract void DoShort();


}
于是 可以在Tank中添加TankPlatformImplementation tanImpl;( 注意是抽象类);


Bridge模式的应用一般在两个非常强的变化纬度.类似于多继承,但多继承是违背单一职责原则的(一个类只有一个变化原因),复用性比较差.
-------------------------