日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

『重构--改善既有代码的设计』读书笔记----Remove Middle Man

發(fā)布時(shí)間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『重构--改善既有代码的设计』读书笔记----Remove Middle Man 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果你發(fā)現(xiàn)某個(gè)類做了過(guò)多的簡(jiǎn)單委托動(dòng)作,你就可以考慮是否可以讓客戶直接去調(diào)用受托類。在Hide Delegate中,我們介紹了封裝受托對(duì)象的好處,但好處歸好處也存在代價(jià),就是當(dāng)你每次需要在受托對(duì)象中增加新函數(shù)的時(shí)候你都需要在委托的服務(wù)對(duì)象中增加相應(yīng)的函數(shù)來(lái)委托。隨著受托對(duì)象特性越來(lái)越多,你會(huì)發(fā)現(xiàn)你所要處理的東西變得越來(lái)越復(fù)雜,你會(huì)感覺(jué)這個(gè)服務(wù)對(duì)象完全成為了一個(gè)中間人(Middle Man),此時(shí)你就應(yīng)該考慮能否讓客戶直接去調(diào)用受托對(duì)象。

你不需要去考慮什么程度的封裝才是合理,重構(gòu)帶給你Hide Delegate和Remove Middle Man的可能,你不需要去考慮這個(gè)問(wèn)題,因?yàn)槟悴豢赡軙?huì)考慮的很周到,需求是不斷變化的,隨著系統(tǒng)設(shè)計(jì)的更新,你的“合適的隱藏程度”也會(huì)發(fā)生相應(yīng)的變化,昨天恰如其分的封裝可能到了今天就變得臃腫不堪,重構(gòu)的意義在于:你永遠(yuǎn)不必說(shuō)對(duì)不起,只要把問(wèn)題的地方修補(bǔ)好就行了

做法:

  • 在服務(wù)對(duì)象上建立一個(gè)新函數(shù)用于獲得受托函數(shù)。
  • 對(duì)于每一個(gè)委托函數(shù),在服務(wù)類中刪除該函數(shù),并讓需要調(diào)用該函數(shù)的客戶轉(zhuǎn)而調(diào)用受托對(duì)象。
  • 處理每個(gè)委托函數(shù)之后都進(jìn)行編譯,測(cè)試。

例子:

class Person {public:Person *manager() const{return m_department->manager();}private:Department *m_department;};class Department {public:Department(Person *person) :m_manager(person){}Person *manager() const{return m_manager;}private:Person *m_manager; };

在這里我們拿Hide Delegate的例子來(lái)解釋,可以看到Person是Department的服務(wù)對(duì)象,Department是Person的受托類,當(dāng)客戶端代碼

manager = john.manager();

要去獲取的時(shí)候,都是通過(guò)Person進(jìn)行間接獲取。但如果大量函數(shù)都需要你這么做,你就必須在Person裝安裝大量的簡(jiǎn)單委托函數(shù)來(lái)處理這個(gè)問(wèn)題。這就是應(yīng)該移除中間人的時(shí)候了,首先在Person中建立一個(gè)函數(shù)用于獲得受托對(duì)象。

class Person {public:Department *deparment() const{return m_department;} };

然后逐一處理每個(gè)委托函數(shù),針對(duì)這樣的函數(shù),我們要找到通過(guò)Person使用的函數(shù),并對(duì)他們進(jìn)行修改,讓他首先獲得受托對(duì)象然后直接使用后者。

manager = johon.department()->manager();

然后我就可以刪除服務(wù)對(duì)象中的委托函數(shù)了,如果我遺漏了什么,編譯器會(huì)告訴我。為了方便起見,可能會(huì)有情況會(huì)去保留部分委托關(guān)系,此外也有可能需要會(huì)對(duì)客戶隱藏委托關(guān)系,讓另外一些客戶直接使用受托對(duì)象,基于這些原因,你也可以適當(dāng)?shù)谋A粢恍┖?jiǎn)單的委托函數(shù)并把它們放在原地。

?

轉(zhuǎn)載于:https://www.cnblogs.com/rickyk/p/4168705.html

總結(jié)

以上是生活随笔為你收集整理的『重构--改善既有代码的设计』读书笔记----Remove Middle Man的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。