從婚禮通知說起 此處應有一張圖片,新娘和新郎拿著手機湊在一起商量,該邀請哪些人來參加婚禮呢? 重點放在婚禮通知這個動作上,那麼如何用代碼來簡單描述這個『通知』呢? 回味下婚禮通知中的兩個重點過程: 1. 親朋好友要求這對新婚夫婦將自己添加進通知名單裡面,這樣新婚夫婦結婚的時候就可以通知他們來參加婚禮
從婚禮通知說起
此處應有一張圖片,新娘和新郎拿著手機湊在一起商量,該邀請哪些人來參加婚禮呢?
重點放在婚禮通知這個動作上,那麼如何用代碼來簡單描述這個『通知』呢?
// 1. 首先得有一對新婚夫婦
NewlyMarriedCouple couple;
// 2. 有若幹親朋好友,這些人都有attend2Wedding()方法,新婚夫婦調用這個方法,他們就會來參加婚禮
People xiaofu;
People xiaoqi;
People xiaodi;
...
// 3. 結婚前,親朋好友告訴這對新婚夫婦,結婚的時候一定要通知他們哦。於是新婚夫婦把這些人加進通知名單裡面,等他們結婚了再調用他們參加婚禮的方法,讓他們過來
couple.add2List(xiaodi);
couple.add2List(xiaoqi);
couple.add2List(xiaofu);
...
// 4. 這對新婚夫婦舉辦婚禮了,於是通知名單裡面的所有人來參加婚禮
couple.notify();
// 通知呢就是遍歷名單裡面的所有人,調用他們預留的參加婚禮的方法
public void notify() {
for (People guest: namelist) {
guest.attend2Wedding();
}
}
回味下婚禮通知中的兩個重點過程:
親朋好友要求這對新婚夫婦將自己添加進通知名單裡面,這樣新婚夫婦結婚的時候就可以通知他們來參加婚禮;
新婚夫婦辦婚禮了,於是通知大家來參加,通知就是遍歷名單,逐個邀請他們過來。
抽象一下:
親朋好友將自己註冊進新婚夫婦的通知名單里;
新婚夫婦遍歷名單,調用每個人參加婚禮的方法,完成通知;
再抽象一下:
註冊;
通知;
至此,我們就完成了『通知模式』的描述(納尼,不是觀察者模式嗎?不著急啊)。
通知模式還有以下兩個關鍵性問題:
註冊到哪裡?通知人有個名單(基礎特征就是有這樣一個list);
什麼時候通知?通知人某個狀態改變(比如要辦婚禮了)。
通知模式是站在通知者(新婚夫婦)的角度考慮,即通知者擁有一個list,list裡面都是關心通知者的人,這些人都實現了相同的一個介面即具備了相同的某個能力,比如參加婚禮。當通知者狀態改變(辦婚禮了)就調用自己的通知方法,方法里遍歷所有人並調用大家參加婚禮的方法以便通知大家參加婚禮。至此實現通知功能。
通知功能的實現,重點在:
被通知人都到自己的list裡面來,而且都要實現同一個介面;
只要通知裡面的時候,只需要遍歷你們並調用同一個方法即可;
這個模式的亮點就在於,被通知的人都實現了同一個介面,擁有同一個方法。這就存在了,大家把自己註冊進通知者list,通知者一個遍歷list就實現通知功能的可能。否則,如果每個被通知人的調用方法都不一樣,那麼就需要分別調用。這也就是介面存在的強大意義,兩個字,規範。
我們回到沒有介面需要分別調用的時代,這個時候,即每個人都需要分別通知
那麼每個人都是關心新婚夫婦的人,類似於不斷觀察新婚夫婦的人,所以稱之為觀察者。
今天,介面已經存在了,。而且明明就是非同步的通知,並不是同步的觀察,所以為什麼還用所以為什麼還用觀察者模式來稱呼呢。
所以本文稱之為通知模式。
修訂
2016/02/15 23:50 初稿