日韩性视频-久久久蜜桃-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)原則相對于,使用情況與上述相反,再次就不做過多的贅述了。

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

總結

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

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

主站蜘蛛池模板: 天堂在线观看中文字幕 | 日日夜夜爱 | 久久免费公开视频 | 亚洲日b视频 | 噜啪啪| 精品一区二区在线视频 | av的天堂| 看毛片的网址 | 性生交大片免费看女人按摩 | 成人午夜网址 | av高清在线免费观看 | 公侵犯一区二区三区四区中文字幕 | 亚洲天堂资源 | 成人3d动漫一区二区三区 | 91麻豆蜜桃一区二区三区 | 中文字幕精品视频在线 | 足交在线观看 | 国产一区二区三区视频在线播放 | 精品视频一区二区三区四区 | 极品五月天 | 天堂在线www| 91蝌蚪91密月| av午夜在线观看 | 91在线资源| 日日骚影院 | 在线观看黄色片网站 | 日韩av免费在线观看 | 夫の上司に犯波多野结衣853 | 破处视频在线观看 | 日韩字幕在线 | 中文字幕在线国产 | 日本男人天堂 | 亚洲91久久 | 成人91视频 | 国产人成视频在线观看 | 欧美久久久久久久久久久久久久 | 亚洲精品综合久久 | 91av视频网 | 国产一级全黄 | 欧美激情精品久久久久久变态 | www.在线看 | 扒开美女内裤狂揉下部 | 6080一级片 | 亚洲国产一二三区 | 我的公把我弄高潮了视频 | 国产精品xxx在线 | 看片免费黄在线观看入口 | 玖玖玖国产精品 | 欧美不卡在线观看 | av一区在线播放 | 不卡中文字幕在线 | 中文字字幕 | www.四虎影视.com | 欧美激情啪啪 | 免费在线看污 | 成人久久av | 欧美永久视频 | 欧美jizzhd精品欧美18 | 人妻熟女一区二区aⅴ水 | 国产高清在线免费观看 | 国产尤物av| 精品久久久久久久久久久aⅴ | 日韩在观看线 | 久久久亚洲国产精品 | 国产大学生视频 | 日韩欧美成人精品 | 极品五月天 | 日日草夜夜草 | 一级特黄性色生活片 | 国产精品女教师 | 国产精品操 | 骚狐网站 | 女人看黄色网 | 国产xxxx在线 | 成年人免费观看网站 | 久久最新精品 | 红桃av | 国产精品无码AV | 波多野结衣视频网址 | 熊猫成人网| 欧美日韩在线免费视频 | 久久女人网 | 日本在线视频观看 | 亚洲成人一二区 | 久久性感视频 | 蜜桃视频久久 | 国产精品熟妇一区二区三区四区 | 欧美一级爆毛片 | 一区二区不卡免费视频 | 国产成人免费av | 天堂视频一区二区 | 国产精品免费一区二区三区在线观看 | 大胸奶汁乳流奶水出来h | 久久激情综合网 | 天堂视频免费 | 国产91页| 九九热在线观看 | 人人人插 | 久久久久久国产精品视频 |