設(shè)計(jì)模式經(jīng)常考慮的一個(gè)問(wèn)題是將對(duì)象間關(guān)系解耦,逼近開(kāi)閉原則吧享,使得代碼容易擴(kuò)展
最近設(shè)計(jì)到讀寫(xiě)者間信息的傳遞,writer需要定期將信息告知reader譬嚣,最開(kāi)始想到的是監(jiān)聽(tīng)者模式钢颂,將reader注冊(cè)到writer,
后來(lái)涉及到writer未必總是提前存在拜银,因此需要一個(gè)中心者協(xié)調(diào)殊鞭,這樣演變?yōu)轭?lèi)似pub/sub的架構(gòu)(中心管理者來(lái)負(fù)責(zé)更多的協(xié)調(diào))
ps:一篇很好的Event Notifier設(shè)計(jì)模式分析文章
writer,reader關(guān)系分析(原始的單向傳遞構(gòu)思):
創(chuàng)建Reader時(shí)尼桶,需要判斷Writer是否存在操灿,如果存在需提供其activeSegmentId,及active Vector到reader疯汁,并將reader注冊(cè)到writer牲尺,以便于reader接收最新的數(shù)據(jù);不存在時(shí)幌蚊,則暫不處理谤碳,當(dāng)創(chuàng)建writer時(shí)注意傳遞信息。
考慮到Writer和Reader間信息的傳遞溢豆,將cgManager設(shè)計(jì)為Writer的監(jiān)聽(tīng)者蜒简,Reader作為cgManager的監(jiān)聽(tīng)者,VectorWriter側(cè)信息變化時(shí)漩仙,首先傳遞到cgManager搓茬,然后傳遞到Reader。同時(shí)cgManager負(fù)責(zé)協(xié)調(diào)Reader和Writer的早晚到達(dá)問(wèn)題:這樣進(jìn)行傳遞使得設(shè)計(jì)略顯復(fù)雜队他,于是演變?yōu)轭?lèi)pub/sub的架構(gòu)卷仑,cgManager不作為writer的監(jiān)聽(tīng)者,而是作為一個(gè)管理者麸折。