之所以把这两个放在一起,是因为他们很相似,但又是完全不同的
先来看看Bridge模式
1)如果客户给了一个需求,故我们实现了类A
2)过了几天客户说这个东东需要有两种算法,故我们派生出 A0, A1
3)然后又过了几天,客户又提出要求说要在不同的操作系统下实现,故我们派生出类A0a, A0b, A1a, A1b
这样我们需要不停的派生,不停的改
Bridge模式就是解决这个问题的, 对象和行为都要不停的改变, 把对象和行为类分开,单独演进,在对象类中包含行为类的变量,这样就可以随意组合,其类图关系如下
其中,Abstraction和 AbstractionImp分别是类和行为的抽象接口,即基类。Bridge用组合而不是继续的方式来处理问题,这是符合面向对象的思想的,能有组合的尽量不用继承,这样使得代码更灵活。
有一篇文章对Bridge讲得特别好,http://www.blogjava.net/lijiajia418/archive/2006/09/18/70268.html
另外说点Bridge和visitor的相似和不同点:
我刚开始看的时候觉得两个模式几乎就是一样的,都是把元素和行为进行分离,然后可以独立演变和组合。但其实他们还是有很大的不同的
1)对于Bridge模式,Abstracti