08年05月19日

Posted on 2008-05-19 16:26 RichardHe 阅读(946) 评论(0)  编辑 收藏 引用
监听器的注册与使用,也就是设计模式中的观察模式(observer),一对多关系
update的参数应该是subject,可以这样认为,如果把subject当作老师,observer当作学生的
话,那就比较容易明白了,update(subject* sub),也就是老师的状态发生改变时,学生也要
发生改变,并且发的变化是由老师这个参数来决定;既对老师进行监听..伪代码如下:
 1 class Student;
 2 class Teacher
 3 {
 4    public:
 5         Teacher(){}
 6         ~Teacher(){}
 7         //把学生注册到老师中.
 8         void attach(Student* stu){stlist.push_back(stu);}
 9         void detach(Student* std);{//不用的对象删除}
10         STATE getSate();
11         //对每个学生通知
12         void notify(){
13         std::list<Student*>::iterator it=m_stlist.begin();
14          for(it;it <=m_stlist.end(); ++it)
15         {   (*it)->update(this);
16          }
17    private:
18        typedef std::list<Student*> StudentList;
19        StudentList m_stlist;
20 };
21 
22 class Student
23 {
24   public:
25   Student();
26 ~Student();
27  void update(Teacher* teach){teach->getState();//根据老师的状态来决定所要做的事.}
28 };


朋友们的讨论:

unix_koria--捐款救灾义不容辞! 说:
因为 stu的update是由老师触发
unix_koria--捐款救灾义不容辞! 说:
实际的工程中,一般都需要知道是哪个具体对象触发这种事件
kun123456765 说:
但是我觉得在这里不是必须的
unix_koria--捐款救灾义不容辞! 说:
update实际就是个事件而已,给teacher参数,那么可以在stu和tea之间建立联系啊。
kun123456765说:
我认为 可以根据实际情况来 决定 子对象 是否 需要知道 什么是父对象
unix_koria--捐款救灾义不容辞! 说:
但大部分都是需要的。
Richard He 说:
还有其它的优点吗?
kun123456765 说:
恩,在Student中 保存一个Teacher*
unix_koria--捐款救灾义不容辞! 说:
还会有回调要求的。
kun123456765 说:
在构造的时候就传递
new stu (this)
unix_koria--捐款救灾义不容辞! 说:
即update里 很多时候需要通知 宿主
unix_koria--捐款救灾义不容辞! 说:
在构造的时候就传递
new stu (this)

这样就限制太死了。
unix_koria--捐款救灾义不容辞! 说:
学生就是学生.
kun123456765 说:
也可以换个别的方式。
但是我还是认为 不是必须,而是根据需求来的。
观察者模式的重点应该在通知机制
unix_koria--捐款救灾义不容辞! 说:
..............
unix_koria--捐款救灾义不容辞! 说:
如果不传进个老师,有什么优点?
kun123456765说:
不知道。
unix_koria--捐款救灾义不容辞! 说:
设计模式 说的是 大部分通常的做法.....
unix_koria--捐款救灾义不容辞! 说:
没说一定要那样,哈哈,你觉得不爽那就不用噶。...
unix_koria--捐款救灾义不容辞! 说:
但传了teacher指针,则可以兼容更多情况。
kun123456765 说:
这点我承认。
unix_koria--捐款救灾义不容辞! 说:
因为指针可以为NULL
unix_koria--捐款救灾义不容辞! 说:
承认就行了,没必要在这个点上扣问题了吧.

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 94, comments - 138, trackbacks - 0, articles - 94

Copyright © RichardHe