我觉得Bridge和Vistor特别的像,区分不开

03-05-21 chilopod
Bridge

http://www.jdon.com/designpatterns/bridge.htm

Vistor 我想工另外一个例子

http://www-900.ibm.com/developerWorks/cn/java/l-dpstruct/part2/index.shtml

我完全可以用vistor的模式去设计birdge中的coffee的例子

----------欢迎讨论------------

1
banq
2003-05-21 12:18
有区别的

chilopod
2003-05-21 16:46

liubing76
2003-05-21 16:59
这两个有很大的区别。

chilopod
2003-05-22 09:03
是否可以说一些本质上的区别

chilopod
2003-05-22 09:04
主要说条件,什么条件下用什么模式比较合适?

liubing76
2003-05-22 09:47
条件:

你可以看《设计模式》的适用性。

jackypeng
2003-05-26 11:25
Bridge和Vistor的区别很大,前者是结构模式,它的主要是在设计前产品设计时使用,本质上它使用了系统依赖于接口的而不是它的实现的原理,它通常和工厂模式一起使用.

,后者是行为模式,它的使用的是双分派技术,他独立出了对象的行为,不依赖于他的实现,他经常用和复合模式一起使用

bruce
2003-06-05 03:41
我觉得的是这样:

Bridge和Vistor有区别,也有联系。

联 系:

chilopod 辛辛苦苦的写了两种方法实现同一问题,其中是有联系的,比如说它们都有动态的结合功能,通过在Client side 实例化不同的对象就可以得到不同的组合。

区 别:

首先在概念上有比较大的区别。其次,Vistor的扩展性比Bridge差,比如说我们再加一个SQL Server 数据库,那么Vistor首先要加一个SQL Server 类在抽象端,其次要改实现端的接口,而Bridge只需在实现端加一个SQL Server 的子类。还有Vistor的代码可读性不好。(个人意见)

bruce
2003-06-10 11:03
Hi, chilopod

俺花了功夫看了你的两个长长的用Bridge & Visitor实现的程序,,俺也写了自已的感受,你也多少给点意见好不好?期待中......

wwlhp@jdon.com
2003-06-12 12:41
每个模式都有其使用的特定背景(场合、情况)。理解使用背景同样是非常重要的。

Visitor模式的背景是:我们眼前有一个集合,里面是五花八门的各种各样的对象,我们想在一个迭代中对每个对象实施操作sampleOperation,但苦于不同对象的sampleOperation操作的实现不同。

用访问者模式实现数据库访问显然与Visitor模式的意图相距千里。

bruce
2003-06-13 07:51
难道除了概念和使用背景外,咱们就不可以找一些它们实现时的共性与个性吗?

不同的模式,不同点当然好找,但为什么就不能转个角度去深刻认识呢?

Although they are different, 我还是觉得它们在“动态结合”上有一些共同的地方,垦请斑主及道友给点意见。

iyshang
2003-06-13 21:12
bruce:同意你说的两者的区别。

至于动态结合,我认为,bridge指的是类/对象间的结合;而visitor指的是行为和对象的结合。

richardluopeng
2003-06-13 22:13
呵呵,bridg是抽象和实现动态结合,而visitor 是动态的二次反转

bruce
2003-06-13 23:16
很高兴iyshang,richardlupeng的答复。

iyshang:

你说的"bridge指的是类/对象间的结合;而visitor指的是行为和对象的结合。",我只能同意一部分。

还记得Banq的bridge的例子,大小杯与加奶不加奶,其中大小杯可以看成对象,但加奶不加奶,我觉得应还是行为。

所以,

visitor和bridge都指的行为和对象的结合,其不同点在于,visitor在开始的时候已经把行为与对象做了默认的组合,其动态组合只是重新delegate而已(richardluopeng所说的二次反转)。而bridge并没有作行为与对象默认的组合,只是在定义的时候认为可能会有这样的组合,也就是说认为可能会有概念上的Overlap.

例如,大小杯与加奶不加奶问题中,

在bridge,认为可能会有四种不同的组合,or 少于四种的组合。

在visitor, 已经做了一些硬性的假设组合,如大杯加奶,小杯不加奶等。只不过在调用visitable中的accept()时,去真正指向大杯加奶的具体实现。

两种动态组合差别还是比较大的。

不知说的是不是很含糊。

猜你喜欢
2Go 1 2 下一页