分享一個內(nèi)存緩存模塊的設(shè)計

先上圖片西采。


內(nèi)存緩存模塊

根據(jù)圖片來說一下其中的想法。(注:圖中的service指的是業(yè)務(wù)層)

1. 真實(shí)的緩存對象存放在Cache類中,被protected修飾,CacheProxy類實(shí)際不儲存任何緩存對象买鸽,其與Cache類同包,并為外部提供public方法訪問Cache贯被。
a.Protected修飾保證只有CacheProxy可以訪問Cache類眼五。在協(xié)同開發(fā)中就不用擔(dān)心有人繞過了你的設(shè)計直接訪問Cache。
b.CacheProxy可以提供更加豐富的方法彤灶,比如緩存中是個List對象看幼,根據(jù)需要Facade可以提供將其變?yōu)閙ap并返回的方法』仙拢或者為了保證原緩存對象不被修改诵姜,取對象的時候深拷貝一個對象并返回。

2. CacheManagerService負(fù)責(zé)統(tǒng)一更新緩存的邏輯苞轿。
a. 更新緩存的邏輯,涉及到怎么取需要的數(shù)據(jù)逗物,怎么存搬卒。怎么取數(shù)據(jù)這一步主要是業(yè)務(wù)邏輯,不應(yīng)該在CacheManageService中實(shí)現(xiàn)翎卓,應(yīng)該定義一個接口契邀,由另外一個類去實(shí)現(xiàn)。CacheManageService只要負(fù)責(zé)調(diào)用接口(圖中的ExternalDataService/FileDataService/DbDataService)失暴。
這樣做一個是業(yè)務(wù)相關(guān)代碼可以重用坯门,再一個即使這部分業(yè)務(wù)邏輯變了CacheManageService也不受影響(業(yè)務(wù)邏輯很可能變),另外一個其實(shí)也很重要就是使得CacheManageService代碼易讀逗扒。
b. CacheManageService統(tǒng)一負(fù)責(zé)更新古戴,使得更新這一塊邏輯容易修改。比如想加個鎖呀矩肩,換個鎖呀现恼,感覺都不難。

3. MonitorCenter這一塊負(fù)責(zé)監(jiān)控緩存更新條件黍檩,并且觸發(fā)緩存更新(調(diào)用CacheManagerService更新緩存)叉袍。這里我認(rèn)為觀察者模式是很適合的,我將其分為三塊:MonitorCenter類刽酱,Monitor(被觀察者)喳逛,Observer(觀察者)。
a. MonitorCenter類負(fù)責(zé)這個監(jiān)控模塊的初始化棵里,統(tǒng)一注冊觀察者們到Monitor(被觀察者)中润文。程序啟動的時候調(diào)用一下MonitorCenter的初始化方法就行拉(圖中的register方法)姐呐。
b. Monitor負(fù)責(zé)監(jiān)控相關(guān)消息,比如已經(jīng)到每天的凌晨兩點(diǎn)转唉,收到新的消息皮钠,文件有更新。然后通知Observer赠法。
c. Observer負(fù)責(zé)收到通知的時候麦轰,判斷是否要更新,然后觸發(fā)CacheManageService的相關(guān)更新方法砖织。
判斷是否要更新這個邏輯是要放在Observer中的款侵,比如圖中MessageAObserver和MessageBObserver自己判斷是不是消息A和消息B。試想一下如果放到MessageMonitor中那他需要判斷這個消息是什么侧纯,還要從觀察者列表中找到MessageAObserver新锈,并且保證消息不能發(fā)給MessageBObserver。好吧眶熬,這想想就夠了妹笆,別去做這種事。

4. start娜氏,在程序啟動的時候只需要調(diào)用兩個方法就能使得這個模塊正常運(yùn)行拳缠。一個是CacheManagerService的init方法初始化緩存。一個是MonitorCenter的register方法讓其在合適的時間觸發(fā)緩存的更新贸弥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窟坐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绵疲,更是在濱河造成了極大的恐慌哲鸳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盔憨,死亡現(xiàn)場離奇詭異徙菠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)郁岩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門懒豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驯用,你說我怎么就攤上這事脸秽。” “怎么了蝴乔?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵记餐,是天一觀的道長。 經(jīng)常有香客問我薇正,道長片酝,這世上最難降的妖魔是什么囚衔? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮雕沿,結(jié)果婚禮上练湿,老公的妹妹穿的比我還像新娘。我一直安慰自己审轮,他們只是感情好肥哎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疾渣,像睡著了一般篡诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榴捡,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天杈女,我揣著相機(jī)與錄音,去河邊找鬼吊圾。 笑死达椰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的项乒。 我是一名探鬼主播啰劲,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼板丽!你這毒婦竟也來了呈枉?” 一聲冷哼從身側(cè)響起趁尼,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埃碱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后酥泞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砚殿,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年芝囤,在試婚紗的時候發(fā)現(xiàn)自己被綠了似炎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悯姊,死狀恐怖羡藐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悯许,我是刑警寧澤仆嗦,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站先壕,受9級特大地震影響瘩扼,放射性物質(zhì)發(fā)生泄漏谆甜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一集绰、第九天 我趴在偏房一處隱蔽的房頂上張望规辱。 院中可真熱鬧,春花似錦栽燕、人聲如沸罕袋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炫贤。三九已至,卻和暖如春付秕,著一層夾襖步出監(jiān)牢的瞬間兰珍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工询吴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掠河,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓猛计,卻偏偏與公主長得像唠摹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奉瘤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點(diǎn):a) 高內(nèi)聚勾拉、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,743評論 0 14
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉盗温,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評論 0 9
  • 參考資料:菜鳥教程之設(shè)計模式 設(shè)計模式概述 設(shè)計模式(Design pattern)代表了最佳的實(shí)踐藕赞,通常被有經(jīng)驗(yàn)...
    Steven1997閱讀 1,173評論 1 12
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,383評論 8 265
  • 我才二十歲, 還沒有成為喜歡的自己卖局, 所以街上車來車往斧蜕, 紅塵潮起潮落, 你認(rèn)不出我也沒關(guān)系砚偶。 待我三十歲批销, 眉眼...
    林下啊閱讀 294評論 19 15