请教strategy 和 bridge的区别

strategy 和 bridge 使用的都是合成,引用的也是接口,接口的实现可以独立变化,它们都是合成和面向接口编程的范例,可是它们本质的区别是啥呢,还请各位高手解惑!

看来这个问题太简单了……

>它们本质的区别是啥

你看到的他们共同点只是表面现象,也就是是展示了合成和面向接口是什么样的,这其实展示了什么是OO,所以,我说只有掌握设计模式,才说明你入了OO的门。因为设计模式不只是简单展示OO的技术特点,而且告诉你在什么情况下如何使用这些技术特点,而这点才是最重要,才是真正的编程思想,所以,用这个标准来看,那个Thingking in Java Java编程思想 TIJ是挂羊头卖狗肉。

在什么情况下使用这些技术特点,如合成和面向接口,也就是strategy 和 bridge 的本质区别,所以,合成和面向接口是结果,我们从结果无法推断到其原因,既然探讨原因,就不能用结果的语境来表达,也就是说,无法从合成和面向接口上去解释他们的本质。

还是得从模式定义上找原因,Strategy是策略模式,适合解决策略算法替换的情况;而Bridge是桥模式,是将对象行为和抽象分离,达到可以应付行为变化的目的,所以,这两个模式很显然侧重点适应的情况是不同的。

非常感谢banq的热情,本人对这句话“而Bridge是桥模式,是将对象行为和抽象分离”不是很理解,“对象行为和抽象分离”能具体并且通俗的解释一下吗


里面的咖啡加牛奶的例子很通俗。:)

对于"抽象和抽象行为分离"是手段
应用的情景是
随着抽象行为引入,继承结构或者抽象类爆炸式增长,用这种手段将不同的抽象行为进一步抽象成一个接口被抽象类引用,接口这一方实现多态,其中应用了适配器模式

桥模式主要应用背景是,
抽象类行为的具体实现中有重复的方法行为
比如按照原先的
照片和文档继承了资料抽象类,在具体的实现比如修改的时候是不是要特别为照片和文档写2个
修改的方法,但是如果这2个修改的方法具体实现是相同的(比如调用了另外库中的修改方法),那么不是重复了吗,这个时候就可以应用桥模式,将抽象成一个接口,并且对象应用,这样就可以不用一个一个去实现了
-------------------------------------------------------------------------------


照片和文档都继承了抽象类,那么可以将修改方法的实现写在抽象类里,子类不复写,这不就能保证这个方法在所有子类里都有了么?这个例子不能说明bridge的好处吧

strategy模式是行为模式,注重的是对行为的封装,而brige模式是结构模式,更加看重对分离的东西的整合,因为bridge虽然将抽象和实现分开实现,但是它也要注重抽象和实现的结合。