什么是解耦

解耦:假設(shè)生產(chǎn)者和消費(fèi)者分別是兩個類。如果讓生產(chǎn)者直接調(diào)用消費(fèi)者的某個方法,那么生產(chǎn)者對于消費(fèi)者就會產(chǎn)生依賴(也就是耦合)。將來如果消費(fèi)者的代碼發(fā)生變化,可能會影響到生產(chǎn)者。而如果兩者都依賴于某個緩沖區(qū),兩者之間不直接依賴,耦合也就相應(yīng)降低了。生產(chǎn)者直接調(diào)用消費(fèi)者的某個方法,還有另一個弊端。由于函數(shù)調(diào)用是同步的(或者叫阻塞的),在消費(fèi)者的方法沒有返回之前,生產(chǎn)者只好一直等在那邊。萬一消費(fèi)者處理數(shù)據(jù)很慢,生產(chǎn)者就會白白糟蹋大好時光。緩沖區(qū)還有另一個好處。如果制造數(shù)據(jù)的速度時快時慢,緩沖區(qū)的好處就體現(xiàn)出來了。當(dāng)數(shù)據(jù)制造快的時候,消費(fèi)者來不及處理,未處理的數(shù)據(jù)可以暫時存在緩沖區(qū)中。等生產(chǎn)者的制造速度慢下來,消費(fèi)者再慢慢處理掉。

因為太抽象,看過網(wǎng)上的說明之后,通過我的理解,我舉了個例子:吃包子。

假如你非常喜歡吃包子(吃起來根本停不下來),今天,你媽媽(生產(chǎn)者)在蒸包子,廚房有張桌子(緩沖區(qū)),你媽媽將蒸熟的包子盛在盤子(消息)里,然后放到桌子上,你正在看巴西奧運(yùn)會,看到蒸熟的包子放在廚房桌子上的盤子里,你就把盤子取走,一邊吃包子一邊看奧運(yùn)。在這個過程中,你和你媽媽使用同一個桌子放置盤子和取走盤子,這里桌子就是一個共享對象。生產(chǎn)者添加食物,消費(fèi)者取走食物。桌子的好處是,你媽媽不用直接把盤子給你,只是負(fù)責(zé)把包子裝在盤子里放到桌子上,如果桌子滿了,就不再放了,等待。而且生產(chǎn)者還有其他事情要做,消費(fèi)者吃包子比較慢,生產(chǎn)者不能一直等消費(fèi)者吃完包子把盤子放回去再去生產(chǎn),因為吃包子的人有很多,如果這期間你好朋友來了,和你一起吃包子,生產(chǎn)者不用關(guān)注是哪個消費(fèi)者去桌子上拿盤子,而消費(fèi)者只去關(guān)注桌子上有沒有放盤子,如果有,就端過來吃盤子中的包子,沒有的話就等待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容