也談 設計模式之Observer模式
Posted on 2009-04-06 18:00 S.l.e!ep.¢% 閱讀(1810) 評論(3) 編輯 收藏 引用 所屬分類: Design Pattern與其說“也談”
事實上就是看完,設計模式之Observer模式?的讀后感
?大概就是“人云亦云”的意思
在過去的代碼中,大概也就只粗略地用了 工廠跟Observer 了
書上和網上的例子看不過少,但實際用起來才發現不是那么回事
void?notify(AccountArgs?args)
?{
????????for(list<IObserver*>::iterator?itr?=?observerList.begin();itr!=observerList.end();itr++)
?????? {
?????????????(*itr)->Update(args);
???????}
}
在應用中可能有n個參數
???? 那么會有 n 個 notify版本
??? void?notify(AccountArgs?args1);
??? void?notify(AccountArgs?args1, AccountArgs?args2);
??? ……
見到有人把參數又定義成了一個個結構, 也有人用了模板函數來調用……
????????for(list<IObserver*>::iterator?itr?=?observerList.begin();itr!=observerList.end();itr++)
?????? {
?????????????(*itr)->Update(args);
???????}
這個循環是阻塞的,如果你沒異步實現的話,
如果是一個服務器程序,如果是阻塞的,效率很低
事實上就是看完,設計模式之Observer模式?的讀后感
?大概就是“人云亦云”的意思
在過去的代碼中,大概也就只粗略地用了 工廠跟Observer 了
書上和網上的例子看不過少,但實際用起來才發現不是那么回事
void?notify(AccountArgs?args)
?{
????????for(list<IObserver*>::iterator?itr?=?observerList.begin();itr!=observerList.end();itr++)
?????? {
?????????????(*itr)->Update(args);
???????}
}
在應用中可能有n個參數
???? 那么會有 n 個 notify版本
??? void?notify(AccountArgs?args1);
??? void?notify(AccountArgs?args1, AccountArgs?args2);
??? ……
見到有人把參數又定義成了一個個結構, 也有人用了模板函數來調用……
????????for(list<IObserver*>::iterator?itr?=?observerList.begin();itr!=observerList.end();itr++)
?????? {
?????????????(*itr)->Update(args);
???????}
這個循環是阻塞的,如果你沒異步實現的話,
如果是一個服務器程序,如果是阻塞的,效率很低