每天不斷學(xué)習(xí),才能不斷提升自己。
參見:http://baike.baidu.com/view/1854779.htmhttp://blog.csdn.net/huangkangying/article/details/7901602實現(xiàn)觀察者模式的過程實現(xiàn)觀察者模式有很多形式,比較直觀的一種是使用一種“注冊——通知——撤銷注冊”的形式。下面的三個圖詳細的描述了這樣一種過程: 1、觀察者 ?。∣bserver)將自己注冊到被觀察對象(Subject)中,被觀察對象將觀察者存放在一個容器(Container)里。 2、被觀察對象 被觀察對象發(fā)生了某種變化(如圖中的SomeChange),從容器中得到所有注冊過的觀察者,將變化通知觀察者。3、撤銷觀察 觀察者告訴被觀察者要撤銷觀察,被觀察者從容器中將觀察者去除。 觀察者將自己注冊到被觀察者的容器中時,被觀察者不應(yīng)該過問觀察者的具體類型,而是應(yīng)該使用觀察者的接口。這樣的優(yōu)點是:假定程序中還有別的觀察者,那么只要這個觀察者也是相同的接口實現(xiàn)即可。一個被觀察者可以對應(yīng)多個觀察者,當(dāng)被觀察者發(fā)生變化的時候,他可以將消息一一通知給所有的觀察者。基于接口,而不是具體的實現(xiàn)——這一點為程序提供了更大的靈活性。
【觀察者模式的優(yōu)點和缺點】觀察者模式的優(yōu)點:1、觀察者和主題之間的耦合度較小;2、支持廣播通信;
觀察者模式的缺點:1、由于觀察者并不知道其它觀察者的存在,它可能對改變目標(biāo)的最終代價一無所知。這可能會引起意外的更新。
【觀察者模式適用場景】1、當(dāng)一個抽象模型有兩個方面,其中一個方面依賴于另一個方面。2、當(dāng)對一個對象的改變需要同時改變其它對象,而不知道具體有多少個對象待改變。3、當(dāng)一個對象必須通知其它對象,而它又不能假定其它對象是誰。換句話說,你不希望這些對象是緊密耦合的。
Powered by: C++博客 Copyright © SunRise_at