Banq:看了你的设计模式:Observer,有些疑问

你举的例子中

一个数据比如Name就要一个Observer

再来一个Price就要新建一个Observer

假如我一个商品,有100个属性,难道要100个Observer吗

请问如何解决这个问题?

可以使用一个方法作为执行listener的入口啊,例如
public void setChange(){
......
}
这样就 ok了。
如果你要观察某个属性的改变,那就需要在特定的属性中监听改变。或者你可以看一下sun的Observer的实现

你好

可以具体地说说吗

比如写一些关键代码出来看看

谢谢

如果你是需要监听product的改变,还是某个属性的改变?

我的具体需求如下:

数据库中有3个表,记录了以下信息:
一种产品(N个),有N个属性

我要监控后台管理程序对数据库的以下操作

1.增加一个产品
2.删除一个产品
3.更新某个产品的某个属性
4.更新某个产品的某几个属性
------------------------------

应该比较复杂吧,小弟洗耳恭听

每次对数据库的操作

都要映射到一个products.xml上

也就是说

我往数据库增加一个产品

products.xml上就相应地增加了一个product元素

我更新了数据库中某个产品的某个属性

products.xml上就相应地更新了那个产品的那个属性

...........................

这个可能没必要使用observer

可是使用castor的数据库到XML复制的功能,这个功能可以roll back,也就是说具备事务跟踪机制,非常安全方便。

板桥大哥

小弟已经开始按Observer那样做了:(

能否给点意见,如果您来用Observer做这个会......

望不吝赐教,多谢多谢

那你就对每个动作加个observer
可以把这些observer做成能自由添加,由一个程序来总体控制管理,类似jive中的filter管理器。

可否贴一些关键代码出来看看?

> 你举的例子中
>
> 一个数据比如Name就要一个Observer
>
> 再来一个Price就要新建一个Observer
>
> 假如我一个商品,有100个属性,难道要100个Observer吗
>
> 请问如何解决这个问题?

实际上,Observer是针对class来的, 它是无法区分相同class类型的属性的变化的.
eg.
String name, description;
对于name和description的变化,Observer是无法区分的.