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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

代码重构(五):继承关系重构规则

發布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码重构(五):继承关系重构规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

陸陸續續的發表了多篇關于重構的文章了,還是那句話,重構是一個項目迭代開發中必不可少的一個階段。其實重構伴隨著你的項目的整個階段。在前幾篇關于重構的文章中我們談到了函數的重構、類的重構、數據的重構以及條件表達式的重構,那么今天咱們就來聊聊繼承關系的重構。當然還是延續前幾篇博客的風格,我們在博客中的代碼實例依然使用Swift語言來實現,當然還是那句話,使用什么語言無所謂,關鍵是看重構的場景以及重構的思想。

“重構”不僅僅可以改善你既有的代碼設計,還可以改變你組織代碼的思路,使你的程序在設計之初就趨于合理化,利于程序的擴充。重構往往伴隨著設計模式的使用,在重構系列的博客結束后,我想系統的給大家分享一下關于設計模式的東西。當然是結合著各種實例。所謂一名Coder,重構和設計模式是必須涉獵的部分,因為這兩者可以讓你寫出更漂亮的代碼,當然要想真正的掌握設計模式以及各種重構手法,還得結合不同的實例來進行實踐。理論固然重要,但是要想將理論的東西變成你自己的,還必須將理論付諸實踐。廢話少說,進入今天的主題。

一.Pull Up Field (字段上移) &?Pull Down Field (字段下移)

字段上移與字段下移是相對的,也是我們之前所說的“凡事都有其兩面性”,我們要辯證的去看待。我們只對Pull Up Field (字段上移)?這個規則做討論,那么關于Pull Down Field (字段下移)我們不做過多的討論,因為這兩條規則是相反的,理解一條后,把這條規則反過來就是我們要理解的另一條規則。這樣說起來,還是比“舉一反三”要容易的多。

下方這個實例是為了解釋“字段上移”所實現的一個Demo。當然Demo看上去不僅簡單而且是有些夸張的,不過說明字段上移這個規則是完全足夠了的。比如我們有一個父類為MySuperClass,我們有一個子類SubClass1,而在SubClass1中有一個字段父類是沒有的。因為后期需求迭代或者需求變更,我們需要再創建一個SubClass1的兄弟類,就是下方的SubClass2。在SubClass2中與SubClass1中存在相同的字段,那就是var a = 0

? ??

?

?在上述情況下,就需要使用到我們的“字段上移”的規則。也就是說將子類中相同的字段移到父類中。在該實例中就是講var a = 0?移到父類中。重構后的代碼如下所示:

而將“Pull Down Field (字段下移)正好與上面的情況相反。也就是父類中有某些字段,但是這些字段只有在少數子類中使用到,在這種情況下我們需要將這個字段移到相應的子類中即可。除了Pull Up Field (字段上移) &?Pull Down Field (字段下移)?這兩個規則外,Pull Up Method (將函數上移) 和?Pull Down Method (將函數下移)這兩個規則與上述情況類似。就是將上面的字段改成函數,有時候不僅字段會出現上述情況,函數也會出現上述情況,需要我們進行移動。因為使用場景類似,再次就不做過多的贅述了。

?

二、Extract Subclass (提煉子類)

這種情況下用的還是比較多的,當類中的某些方法只有在特定的類的實例中才會使用到,此時我們就需要提煉出一個子類,將該方法放到相應的子類中。這樣一來我們的每個類的職責更為單一,這也就是我們常說的“單一職責”。

在下方示例中,CustomerBook是一個圖書消費者的類。其中customeCharge()方法是普通用戶計算消費金額所需的方法,而vipCharge()方法是VIP用戶調用的方法,在內部vipCharge()需要調用customeCharege()方法。但是對外部而言,vipCharge()方法只有VIP用戶才會用到,在這種情況下我們就需要使用“Extract Subclass (提煉子類)規則對VIP進行提煉。

? ??

?

具體做法是我們需要提煉出一個子類,也就是說將VIP用戶作為普通用戶的子類,然后將只有VIP用戶才調用的方法放到我們的VIP子類中。這樣一來層次更加明確,每個類的職責更為單一。上述示例重構后的結果如下所示。

? ?

與“提煉子類”規則相對應的是“Collapse Hierarchy (折疊繼承關系)”。一句話來概括:就是當你的父類與子類差別不大時,我們就可以將子類與父類進行合并。將上面的示例翻轉就是“Collapse Hierarchy (折疊繼承關系)”規則的示例,再次就不做過多的贅述了。

?

三、Form Template Method (構造模板函數)

Form Template Method (構造模板函數)這一規則還是比較實用的。先說模板,“模板”其實就是框架,沒有具體的實現細節,只有固定不變的步驟,可以說模板不關心具體的細節。舉個栗子,像前段時間比較火的“秘密花園”,那些沒有顏色的線條就是模板,如果一些人獲取的是同一本秘密花園,那么說明每個人所獲取的模板是相同的。但是每個人對每塊的區域所圖的顏色又有差異,這就是實現細節的不同。

言歸正傳,當兩個兄弟類中的兩個函數中的實現步驟大致一直,但是具體細節不同。在這種情況下,我們就可以將大體的步驟提取成模板,放到父類中,而具體細節由各自的子類來實現。具體實現請看下方的類,在Subclass1Subclass2中的calculate()方法中的大體步驟是相同的,就是對兩個值相加,然后返回這兩個值的和。但是具體細節不同,可以看出兩個相加值的具體計算方式不同。

??

?

在上述情況下我們就可以使用“Form Template Method (構造模板函數)規則將相同的計算流程進行提取,也就是構造我們的模板函數。將模板函數放到兩個類的父類中,然后在相應的子類中只給出實現細節即可。下方代碼段是重構后的代碼,父類中多出的方法就是我們提取的模板函數,而子類中只給出相應的實現細節即可。

??

?

四、以委托取代繼承(Replace Inheritance with Delegation

有時候我們為一些類創建子類后,發現子類只使用了父類的部分方法,而且沒有繼承或者部分繼承了父類的數據。在這種情況下我們就可以將這種繼承關系修改成委托的關系。具體做法就是修改這種繼承關系,在原有子類中添加父類的對象字段,在子類中創建相應的方法,在方法中使用委托對象來調用原始父類中相應的方法。

下方示例是我們假想出來的,但是說明該規則是綽綽有余了。我們假設SubClass01類中只會用到SuperClass01中的display()方法,而沒有繼承父類中的數據。在下方示例中是繼承關系,在這種情況下我們需要將其轉換成委托關系。

??

下方是我們重構后的代碼,在下方代碼中我們去除了之前的繼承關系。并在子類中創建了一個之前父類的代理對象,并且創建了一個相應的方法,在該新建的方法中通過代理對象來調用相應的方法。具體如下所示。

??

上述規則與以繼承取代委托Replace Delegation with Inheritance)原則相對于,使用情況與上述相反,再次就不做過多的贅述了。

幾天博客就先到這兒,內容比較簡單,但是還是比較重要的。

總結

以上是生活随笔為你收集整理的代码重构(五):继承关系重构规则的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色婷婷久久五月综合成人 | 久久免费播放 | 不卡中文字幕av | 三级av毛片| 亚洲成人激情av | 91亚洲精品久久久久久久久久久久 | 一区二区三区福利 | 久久精品大片 | 黑人操日本女人视频 | 99久久精品无码一区二区毛片 | 国产91精品在线观看 | 天天干天天操天天拍 | 成人久久免费视频 | 6080福利 | 亚洲在线视频一区 | 免费观看一级黄色片 | 日韩极品在线观看 | 99久久久国产精品无码性 | 亚洲爽爽网 | 国产亚洲精品精品国产亚洲综合 | 欧美三级在线播放 | 福利视频一区二区 | 乱色专区 | 黑人巨大精品欧美一区免费视频 | 久久性网| 手机av在线 | 一级特黄免费视频 | 九九热久久免费视频 | 中国女人内谢69xxxxⅹ视频 | 久章草在线观看 | 怎么可能高潮了就结束漫画 | 国产乱淫av片 | 亚洲毛片a | 国产又粗又猛又爽又黄av | 亚洲av激情无码专区在线播放 | 日韩不卡中文字幕 | 免费国产黄 | 久草欧美 | 中文字幕免费在线观看 | 在线观看va| 国产精品黑人一区二区三区 | 日韩在线精品强乱中文字幕 | 激情内射人妻1区2区3区 | 欧美另类视频在线 | 国产成人在线视频播放 | 天天亚洲 | 精品视频在线播放 | 色666 | 综合精品久久 | 国产成人99| 草草免费视频 | 国产一区二区三区四区视频 | 日本无遮羞调教打屁股网站 | 国产东北真实交换多p免视频 | 天天躁夜夜躁 | 80日本xxxxxxxxx96 亚洲国产精品视频在线 | 国产乱码精品一区二区三区忘忧草 | 久久久性 | 大粗鳮巴久久久久久久久 | 福利精品视频 | 日本一级三级三级三级 | 久草小说 | 午夜美女福利视频 | 日日夜夜一区 | 色老大视频| www.99视频| 狠狠干婷婷 | 久久网中文字幕 | 日本阿v视频 | 欧美日韩在线二区 | 青青视频一区二区 | 亚洲一区二区精品 | 色综合免费视频 | 快播日韩 | 亚瑟av| av爱爱网站 | 黄色小视频网 | 欧美在线观看一区二区 | 自拍偷拍中文字幕 | 精品一区二区三区免费视频 | 日韩aⅴ在线观看 | 吖v在线 | 日本一区二区三区免费电影 | 激情综合网五月天 | 黄色视屏在线看 | 亚洲美女啪啪 | 性色欲网站人妻丰满中文久久不卡 | 久草资源在线播放 | 黑森林av导航 | 欧美一区在线视频 | 亚洲区 欧美区 | 国产一区伦理 | 欧美少妇性生活 | 公侵犯一区二区三区 | 色免费视频| 日韩欧美黄色片 | 亚洲做受高潮无遮挡 | 日韩欧美三级 | 中文字幕av在线 |