之所以把这两个放在一起,是因为他们很相似,但又是完全不同的
先来看看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模式,Abstraction里面要包含AbstractionImp的指针;而对于Visitor而言,Element并不包含Visitor的指针。从这一点上看,Bridge描述的元素和行为的内聚性更高。
2)Bridge的结构使得类的行为与类相对独立,而Visitor则是使得类的某个行为的不同实现之间可以相互独立,并且vistor的行为并不一定属于其处理的对象所应有的行为。Bridge是要解决抽象类与自身行为实现的分

本文探讨了桥接(Bridge)模式和策略(Strategy)模式的相似点和不同之处。桥接模式用于解决类和行为的频繁派生问题,通过组合而非继承实现对象与行为的解耦。策略模式则关注于封装算法并允许动态替换,以实现行为的变化。两者虽然在结构上相似,但在应用场景和关注点上存在本质区别:桥接关注结构,而策略关注行为的动态替换。
最低0.47元/天 解锁文章
918

被折叠的 条评论
为什么被折叠?



