那边没人 来这边发帖求助 关于观察者模式

chenchenyangll 2010-12-07 05:26:53
观察者设计模式能够解决一对多的问题 但是能不能解决多对多的问题?

比如 A被C、D、E观察,B被C、D、E观察,A与B没有任何关系
问 这种情况该怎么处理?
...全文
97 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxx1997 2010-12-08
  • 打赏
  • 举报
回复
这是.net的一个click事件
private void button1_Click(object sender, EventArgs e)

注册这个事件的观察者能得到 谁激发的,并从e中获得额外信息
cxx1997 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenchenyangll 的回复:]

这么说吧 A、B 都有 Notify() C、D、E都有 Update()
那么 A\B在Notify()的时候 C、D、E无法区分是从谁哪里得到通知的
[/Quote]

知道.net怎么解决这个问题吗?看看一般事件的参数中的 object sender
然后C、D、E就能根据sender来区分处理了
TimZhuFaith 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenchenyangll 的回复:]
这么说吧 A、B 都有 Notify() C、D、E都有 Update()
那么 A\B在Notify()的时候 C、D、E无法区分是从谁哪里得到通知的
[/Quote]
这个应该不难解决吧
anguswdm 2010-12-07
  • 打赏
  • 举报
回复
可以解决,比如说
在注册的时候,分别注册不同的事件就可以了。
比如说:
向A中注册事件的时候
A.eventHandler+=OnDoA;
向B中注册事件的时候
A.eventHandler+=OnDoB;
这样不就可以了吗
chenchenyangll 2010-12-07
  • 打赏
  • 举报
回复
这么说吧 A、B 都有 Notify() C、D、E都有 Update()
那么 A\B在Notify()的时候 C、D、E无法区分是从谁哪里得到通知的
TimZhuFaith 2010-12-07
  • 打赏
  • 举报
回复
A,B继承同一个父类,然后重写父类Notify方法
ztenv 2010-12-07
  • 打赏
  • 举报
回复
当然能解决,解决了一个不解决了多个了吗?不同的是C D E 要实现观察接口,在C#中可以叫做事件,比如:A是一个button,B是一个textBox,C D E可以同时响应A的Click事件和B的TextChanged事件;

应该明白了吧?
chenchenyangll 2010-12-07
  • 打赏
  • 举报
回复
A与B 在通知的时候 C、D、E要做不一样的操作 = =
TimZhuFaith 2010-12-07
  • 打赏
  • 举报
回复
这个有区别么

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧