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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

如果你發現某個類做了過多的簡單委托動作,你就可以考慮是否可以讓客戶直接去調用受托類。在Hide Delegate中,我們介紹了封裝受托對象的好處,但好處歸好處也存在代價,就是當你每次需要在受托對象中增加新函數的時候你都需要在委托的服務對象中增加相應的函數來委托。隨著受托對象特性越來越多,你會發現你所要處理的東西變得越來越復雜,你會感覺這個服務對象完全成為了一個中間人(Middle Man),此時你就應該考慮能否讓客戶直接去調用受托對象。

你不需要去考慮什么程度的封裝才是合理,重構帶給你Hide Delegate和Remove Middle Man的可能,你不需要去考慮這個問題,因為你不可能會考慮的很周到,需求是不斷變化的,隨著系統設計的更新,你的“合適的隱藏程度”也會發生相應的變化,昨天恰如其分的封裝可能到了今天就變得臃腫不堪,重構的意義在于:你永遠不必說對不起,只要把問題的地方修補好就行了

做法:

  • 在服務對象上建立一個新函數用于獲得受托函數。
  • 對于每一個委托函數,在服務類中刪除該函數,并讓需要調用該函數的客戶轉而調用受托對象。
  • 處理每個委托函數之后都進行編譯,測試。

例子:

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的例子來解釋,可以看到Person是Department的服務對象,Department是Person的受托類,當客戶端代碼

manager = john.manager();

要去獲取的時候,都是通過Person進行間接獲取。但如果大量函數都需要你這么做,你就必須在Person裝安裝大量的簡單委托函數來處理這個問題。這就是應該移除中間人的時候了,首先在Person中建立一個函數用于獲得受托對象。

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

然后逐一處理每個委托函數,針對這樣的函數,我們要找到通過Person使用的函數,并對他們進行修改,讓他首先獲得受托對象然后直接使用后者。

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

然后我就可以刪除服務對象中的委托函數了,如果我遺漏了什么,編譯器會告訴我。為了方便起見,可能會有情況會去保留部分委托關系,此外也有可能需要會對客戶隱藏委托關系,讓另外一些客戶直接使用受托對象,基于這些原因,你也可以適當的保留一些簡單的委托函數并把它們放在原地。

?

轉載于:https://www.cnblogs.com/rickyk/p/4168705.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。