監(jiān)聽(tīng)器的注冊(cè)與使用,也就是設(shè)計(jì)模式中的觀察模式(observer),一對(duì)多關(guān)系
update的參數(shù)應(yīng)該是subject,可以這樣認(rèn)為,如果把subject當(dāng)作老師,observer當(dāng)作學(xué)生的
話,那就比較容易明白了,update(subject* sub),也就是老師的狀態(tài)發(fā)生改變時(shí),學(xué)生也要
發(fā)生改變,并且發(fā)的變化是由老師這個(gè)參數(shù)來(lái)決定;既對(duì)老師進(jìn)行監(jiān)聽(tīng)..偽代碼如下:
1 class Student;
2 class Teacher
3 {
4 public:
5 Teacher(){}
6 ~Teacher(){}
7 //把學(xué)生注冊(cè)到老師中.
8 void attach(Student* stu){stlist.push_back(stu);}
9 void detach(Student* std);{//不用的對(duì)象刪除}
10 STATE getSate();
11 //對(duì)每個(gè)學(xué)生通知
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();//根據(jù)老師的狀態(tài)來(lái)決定所要做的事.}
28 };
朋友們的討論:
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
因?yàn)椤tu的update是由老師觸發(fā)unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
實(shí)際的工程中,一般都需要知道是哪個(gè)具體對(duì)象觸發(fā)這種事件kun123456765 說(shuō):
但是我覺(jué)得在這里不是必須的
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
update實(shí)際就是個(gè)事件而已,給teacher參數(shù),那么可以在stu和tea之間建立聯(lián)系啊。kun123456765說(shuō):
我認(rèn)為 可以根據(jù)實(shí)際情況來(lái) 決定 子對(duì)象 是否 需要知道 什么是父對(duì)象
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
但大部分都是需要的。
Richard He 說(shuō):
還有其它的優(yōu)點(diǎn)嗎?
kun123456765 說(shuō):
恩,在Student中 保存一個(gè)Teacher*
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
還會(huì)有回調(diào)要求的。
kun123456765 說(shuō):
在構(gòu)造的時(shí)候就傳遞
new stu (this)
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
即update里 很多時(shí)候需要通知 宿主
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
在構(gòu)造的時(shí)候就傳遞
new stu (this)
這樣就限制太死了。
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
學(xué)生就是學(xué)生.
kun123456765 說(shuō):
也可以換個(gè)別的方式。
但是我還是認(rèn)為 不是必須,而是根據(jù)需求來(lái)的。
觀察者模式的重點(diǎn)應(yīng)該在通知機(jī)制
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
..............
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
如果不傳進(jìn)個(gè)老師,有什么優(yōu)點(diǎn)?
kun123456765說(shuō):
不知道。
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
設(shè)計(jì)模式 說(shuō)的是 大部分通常的做法.....
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
沒(méi)說(shuō)一定要那樣,哈哈,你覺(jué)得不爽那就不用噶。...
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
但傳了teacher指針,則可以兼容更多情況。
kun123456765 說(shuō):
這點(diǎn)我承認(rèn)。
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
因?yàn)橹羔樋梢詾镹ULL
unix_koria--捐款救災(zāi)義不容辭! 說(shuō):
承認(rèn)就行了,沒(méi)必要在這個(gè)點(diǎn)上扣問(wèn)題了吧.