1.經典的例子:出版社+訂閱者=觀察者模式
1.1 簡要介紹經典例子
*出版社出版圖書 *訂閱者向出版社訂閱圖書,只要你一直都訂閱者圖書,那麼圖書就會每月都送到你的手上(月刊) * 當你不想看這個圖書了(比如現在品質越來越差的《程式員》),那麼你就可以取消掉這個訂閱 * 只要出版社還在,那麼就肯定會有人去訂閱或者取消訂閱的(即使再差的品質,還是會有人去讀《程式員》)
1.2 引出生活中煩人的例子(公司“黨兄”的悲慘遭遇)
中國移動與中國移動的客戶不可調和的矛盾,在不經意間訂閱了不知道是第三方和中國移動合作的還是中國移動的那種用卑劣手段來促進客戶消費的服務資訊。
中午一起出去吃飯,“黨兄”很納悶,明明說是免費的,按了下去就扣我7.5元錢。杯具啊。我也就調侃一句:誰讓你的手機這麼好,其實手機嘛能電話,能簡訊就OK
了,不需要那麼多功能,啥上網,啥多媒體訊息。都是“脫了衣服的美人前面的一個坑”--讓你不知不覺的就掉進去。
OK,手機使用者與移動的不可調和的矛盾。這就是一個觀察者模式。
2.手機使用者與移動公司不可調和的矛盾
2.1 發掘觀察者和主題
在這裡移動公司的服務資訊就是主題(Subject),手機客戶就是觀察者(Observer)了。“黨兄”就是一個觀察者。移動公司有了啥能夠“誘騙”到客戶的金錢的手段(服務資訊)就通知我們“黨兄”這樣的受害者(手機客戶)。當然不全怪移動,也或許是第三方利用移動的中介來發送的。
黨兄在那邊不經意間掉入了那個坑,當然如果他願意傻傻的繼續享受那每個月7.5元的服務費,那也無妨,當然移動也不會閑著,一有新的服務就還是會繼續發過來給你,讓你再次陷入那美麗的謊言中。移動一天不滅,服務就一月不斷。
面對這樣的慘劇,黨兄當然會非常憤怒,NND中國移動,我要取消那可惡的服務,從此以後不要再發送服務資訊過來了。OK,我就是關閉我的GPRS功能,從此不再接受服務資訊。OK。就這樣悲劇不會再繼續發生了。
3. 簡要UML圖如下:
4.程式實現如下: