實現要點
l 抽象主體角色公開了自身的事件,可以給任意觀察者訂閱。
l 抽象觀察者角色定義了統一的處理行為,在C#中使用事件-代理模式的話,統一的處理行為並不這麼重要,有的時候甚至還會限制靈活性。由於本例的特殊原因,並沒有從這個接口中得益。
l 響應方法訂閱代理事件的操作可以在觀察者中定義也可以在外部定義,根據自己的需求決定,放在外部定義靈活性更高。
l 具體觀察者往往只需要實現響應方法即可。
l 可以有多個主體角色、多個觀察者角色交錯,也可以一個類型是兩個角色,主體也可以提供多個事件。從應用上來說觀察者模式變化是非常多的。
注意事項
l 由於這種靈活性,在觀察者訂閱事件的時候需要考慮是否會出現破壞行為?是否會出現無限循環或死鎖等問題?觀察者響應的時候是否會影響其它觀察者?
l 對於觀察者數量很多的時候使用觀察者模式並不適合,可能會造成性能問題。
l 在不能采用事件-代理方式完成觀察者模式的情況下(比如跨網絡應用等)可以考慮采用傳統的觀察者模式。