Iterator模式:
創(chuàng)新互聯(lián)建站主營保康網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),保康h5重慶小程序開發(fā)公司搭建,保康網(wǎng)站營銷推廣歡迎保康等地區(qū)企業(yè)咨詢
提供一種方法順序訪問一個(gè)聚合對(duì)象中各個(gè)元素, 而又不需暴露該對(duì)象的內(nèi)部表示。leveldb中include/leveldb.h定義了iterator基類,訪問某層sst、某個(gè)sst內(nèi)部kv、某個(gè)memtable內(nèi)部kv、整個(gè)DB內(nèi)部kv都需要迭代器,都是通過繼承iterator來實(shí)現(xiàn)自己的迭代器版本。這樣做能將容器中遍歷數(shù)據(jù)的職能和其他職能分離開來,遵守了單一職能原則;增加新的聚合類時(shí),只需繼承iterator基類實(shí)現(xiàn)新的迭代器版本,遵守了開閉原則。另外,SkipList的迭代器使用內(nèi)部類實(shí)現(xiàn),提高了封裝性,利于獲取其外部類的全部訪問權(quán)限。
責(zé)任鏈模式:
是對(duì)象的行為模式。使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞請(qǐng)求。compaction是leveldb的核心設(shè)計(jì)、比較復(fù)雜的部分。因此比較好的邏輯是將復(fù)雜的職能分離開來,交由若干函數(shù)依次處理(這里的對(duì)象換成了函數(shù),涉及MaybeScheduleCompaction、BackgroundCall、BackgroundCompaction、DoCompactionWork、InstallCompactionResults等等),MaybeScheduleCompaction負(fù)責(zé)判斷是否已經(jīng)schedule了compaction、DB是否正被刪除、是否有錯(cuò)誤、是否需要compaction,BackgroundCall負(fù)責(zé)判斷是否后臺(tái)沒有其他線程執(zhí)行且沒有后臺(tái)錯(cuò)誤,BackgroundCompaction負(fù)責(zé)判斷是否為人工合并以及為compaction做準(zhǔn)備工作(比如需要compaction的文件),DoCompactionWork則是真正的compaction的工作,InstallCompactionResults負(fù)責(zé)構(gòu)造一個(gè)新的edit,并調(diào)用LogAndApply函數(shù)生成新的leveldb版本。
代理模式:
當(dāng)無法直接訪問某個(gè)對(duì)象或訪問某個(gè)對(duì)象存在困難時(shí)可以通過一個(gè)代理對(duì)象來間接訪問。leveldb中LRUHandle、BlockHandle、EnvWrapper的設(shè)計(jì)均體現(xiàn)了代理模式。LRUHandle可以理解為LRUCache采用了引用計(jì)數(shù)的代理類,類似于智能指針,首先減小了LRUCache復(fù)制的龐大開銷,LRUHandle也方便了對(duì)LRUCache的LookUp、Insert、LRU_Append、LRU_Remove等的操作。BlockHandle是Block的代理類,指出了Block的偏移和大小,方便讀取Block。關(guān)于EnvWrapper,leveldb中的Env主要封裝了操作系統(tǒng)的文件接口、后臺(tái)線程的調(diào)度以及鎖的實(shí)現(xiàn),Env是抽象基類,PosixEnv繼承實(shí)現(xiàn)Env,而EnvWrapper即是Env子類PosixEnv的代理類。
建造者模式:
是較為復(fù)雜的創(chuàng)建型模式,將客戶端與包含多個(gè)組成部分(或部件)的復(fù)雜對(duì)象的創(chuàng)建過程分離,客戶端無須知道復(fù)雜對(duì)象的內(nèi)部組成部分與裝配方式,只需要知道所需建造者的類型即可。leveldb中的具體應(yīng)用有TableBuilder、BlockBuilder、FilterBlockBuilder、VersionSet::Builder等。TableBuilder負(fù)責(zé)構(gòu)造Table,而TableBuilder的成員有BlockBuilder、FilterBlockBuilder,前者負(fù)責(zé)構(gòu)造index block和data block,后者負(fù)責(zé)構(gòu)造meta block。VersionSet::Builder負(fù)責(zé)版本的構(gòu)建和更新等工作。建造者模式將產(chǎn)品的使用者不必了解產(chǎn)品內(nèi)部組成細(xì)節(jié),也不必參與產(chǎn)品的構(gòu)建過程;而且將復(fù)雜產(chǎn)品的創(chuàng)建過程分解在不同的方法中,使得創(chuàng)建過程更加清晰,也更方便使用程序來控制創(chuàng)建過程。
網(wǎng)站欄目:leveldb與設(shè)計(jì)模式
文章來源:http://chinadenli.net/article42/gshjhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、、移動(dòng)網(wǎng)站建設(shè)、軟件開發(fā)、自適應(yīng)網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)