bridge的误区?

08-05-08 bloodrate
         

看了一个经典的bridge的例子:牛奶咖啡的例子,突然发现这个例子我之前看不懂是因为给我带来了很多误区,最大的误区就来自于“属性与行为分离”,这个我怎么想怎么觉得跟bridge的例子无关系,更甚至有人解释“属性与行为分离”为“将公用的方法抽离出去不用对象实现重复的方法”,这个解释怎么看怎么都想“模板模式”的思想。

仔细看了咖啡“大杯加奶”“大杯不加奶”“中杯加奶”“中杯不加奶”之后,文章说“大杯”“中杯”实现抽象借口,“加奶”“不加奶”实现抽象行为接口----这个说法让我想了好几个月没想明白,为什么“加奶”“不加奶”就是行为????从语文上讲,中杯加奶是修饰咖啡的,应解释为“加奶的”咖啡,怎么变成行为了呢?我怎么都觉得“大杯”“加奶”都是咖啡的属性阿,而bridge模式是将重叠属性分离开避免类大量膨胀,我理解为“属性属性”和“行为属性”(至少我没把“加奶”看成行为,之前一直不理解就是把加奶看成咖啡的行为了,自然在咖啡接口里增加一个“addmilk()”的行为,结果发现不是这回事)。

另外我觉得重叠的属性总有一个是膨胀规模小的,以那作为抽象接口,另一个行为属性是膨胀化比较大的,在借口中声明,比如“大杯、中杯”这样类型总归没几种,但是“加奶”“加糖”。。。可加的太多了,所以应该在大杯借口中知道“加奶”“加糖”等等。

         

banq
2008-05-08 19:25

>我怎么都觉得“大杯”“加奶”都是咖啡的属性阿
事件和状态是很难分,比如开始命令行为发生后,就进入开始状态,大杯中加奶以后的咖啡,这时就是你所说的状态属性了。

不能从结果倒退原因,大杯中加奶以后的咖啡是结果,原因是我们向大杯中加奶行为发生后,我们讨论的这个原因部分,至于加了以后怎么样不是我们这里关心的。