成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

重構(gòu)-改善既有代碼的設(shè)計(jì)(十一)--處理概括關(guān)系

sherlock221 / 557人閱讀

摘要:構(gòu)造函數(shù)比較難以向上拉動(dòng),因此專門有一個(gè)構(gòu)造函數(shù)本體上移處理它,一般不會(huì)將構(gòu)造函數(shù)往下推,因?yàn)橐怨S函數(shù)取代構(gòu)造函數(shù)通常更管用。

前言

有一批重構(gòu)手法專門用來處理概括關(guān)系(即繼承關(guān)系),主要是將函數(shù)上下移動(dòng)于繼承體系之中字段上移和方法上移都用于將特性向繼承體系的上端移動(dòng),字段下移和方法下移則將特性向繼承體系的下端移動(dòng)。構(gòu)造函數(shù)比較難以向上拉動(dòng),因此專門有一個(gè)構(gòu)造函數(shù)本體上移處理它,一般不會(huì)將構(gòu)造函數(shù)往下推,因?yàn)橐怨S函數(shù)取代構(gòu)造函數(shù)通常更管用。

字段上移 問題

兩個(gè)子類擁有相同的字段

方法

將該字段上移

動(dòng)機(jī)

既然是相同字段就應(yīng)該放在父類中

函數(shù)上移 問題

有些函數(shù),在各個(gè)子類中產(chǎn)生完全相同的效果

方法

將該函數(shù)移至超類

動(dòng)機(jī)

相同效果的方法應(yīng)該可以做成一個(gè)方法吧。

構(gòu)造函數(shù)本體上移 問題

在各個(gè)子類中擁有一些構(gòu)造函數(shù),他們的本體幾乎完全一致

方法

在超類中新建一個(gè)構(gòu)造函數(shù),并在子類構(gòu)造函數(shù)中調(diào)用它

動(dòng)機(jī)

又是重復(fù)代碼。。。

函數(shù)下移 問題

超類中的某個(gè)函數(shù)只與部分(而非全部)子類有關(guān)

方法

將這個(gè)函數(shù)移到相關(guān)的子類去

動(dòng)機(jī)

這個(gè)就是依戀關(guān)系。直接遷移函數(shù)

字段下移 問題

超類中的某個(gè)字段只被部分(而非全部)子類用到

方法

將這個(gè)字段移到需要它的那些子類去

動(dòng)機(jī)

這個(gè)就是依戀關(guān)系。直接遷移字段

提煉子類 問題

類中的某些特性只被某些(而非全部)實(shí)例用到

方法

新建一個(gè)子類,將上面所說的那一部分特性移到子類中

動(dòng)機(jī)

說明這個(gè)類并不是只做一件事。而且還比較重。需要拆分

提煉超類 問題

兩個(gè)類有相似的特性

方法

為這兩個(gè)類建立一個(gè)超類,將相同特性移至超類

動(dòng)機(jī)

用父類來封裝相似的特性,用子類來新特性

# 提煉接口

問題

若干客戶使用類接口中的同一子集,或者兩個(gè)類的接口有部分相同

方法

將相同的子集提煉到一個(gè)獨(dú)立的接口中

動(dòng)機(jī)

同上

折疊繼承體系 問題

超類和子類之間沒有太大的區(qū)別

方法

將它們合為一體

動(dòng)機(jī)

根據(jù)具體情況而用

塑造模板函數(shù) 問題

有一些子類,其中相應(yīng)的某些函數(shù)以相同順序執(zhí)行類似的操作,但各個(gè)操作的細(xì)節(jié)上有所不同

方法

將這些操作分別放進(jìn)獨(dú)立函數(shù)中,并操持它們都有相同的簽名,于是原函數(shù)也就變得相同了,然后將原函數(shù)上移至超類。

動(dòng)機(jī)

比如java的泛型,就是模板函數(shù),能夠大大減少代碼重復(fù)

以委托取代繼承 問題

某個(gè)子類只使用超類接口中的一部分,或是根本不需要繼承而來的數(shù)據(jù)

方法

在子類中新建一個(gè)字段用以保存超類,調(diào)整子類函數(shù),令它改而委托超類,然后去掉兩者之間的繼承關(guān)系。

動(dòng)機(jī)

如果只使用方法的話,可以這樣使用

以繼承取代委托 問題

在兩個(gè)類之間使用委托關(guān)系,并經(jīng)常為整個(gè)接口編寫許多極簡單的委托函數(shù)。

方法·

讓委托類繼承受托類

動(dòng)機(jī)

太簡單的委托是沒有必要的。只會(huì)增加代碼量。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71128.html

相關(guān)文章

  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0
  • 重構(gòu)---改善既有代碼設(shè)計(jì)

    摘要:為何重構(gòu)重構(gòu)有四大好處重構(gòu)改進(jìn)軟件設(shè)計(jì)如果沒有重構(gòu),程序的設(shè)計(jì)會(huì)逐漸腐敗變質(zhì)。經(jīng)常性的重構(gòu)可以幫助維持自己該有的形態(tài)。你有一個(gè)大型函數(shù),其中對局部變量的使用使你無法采用。將這個(gè)函數(shù)放進(jìn)一個(gè)單獨(dú)對象中,如此一來局部變量就成了對象內(nèi)的字段。 哪有什么天生如此,只是我們天天堅(jiān)持。 -Zhiyuan 國慶抽出時(shí)間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關(guān)于書的高清下載連...

    baihe 評論0 收藏0
  • 重構(gòu)-改善既有代碼設(shè)計(jì)(七)-- 在代碼之間搬移特性

    摘要:前言決定把責(zé)任放在哪對于對象設(shè)計(jì)是最重要的之一。重構(gòu)可以很好的解決這個(gè)問題。方法建立一個(gè)新類,將相關(guān)的字段和函數(shù)從舊類搬移到新類。方法將這個(gè)類的所有特性搬移到另一個(gè)類中,然后移除原類。讓這個(gè)擴(kuò)展品成為源類的子類或包裝類。 前言 決定把責(zé)任放在哪對于對象設(shè)計(jì)是最重要的之一。重構(gòu)可以很好的解決這個(gè)問題。以下是筆者的重構(gòu)方法注:客戶:調(diào)用接口客戶類:使用了接口的類服務(wù)類:提供服務(wù)的類 Mov...

    solocoder 評論0 收藏0
  • 重構(gòu)-改善既有代碼設(shè)計(jì)(一)--重構(gòu),第一個(gè)案例

    摘要:并根據(jù)目錄選讀第章重構(gòu),第一個(gè)案例這是只是一個(gè)方法。絕大多數(shù)情況下,函數(shù)應(yīng)該放在它所使用的數(shù)據(jù)的所屬對象內(nèi)最好不要在另一個(gè)對象的屬性基礎(chǔ)上運(yùn)用語句。 什么是重構(gòu) 在不改變代碼外在行為的前提下,對代碼做出修改以改進(jìn)程序內(nèi)部的結(jié)構(gòu)簡單地說就是在代碼寫好后改進(jìn)它的設(shè)計(jì) 誰該閱讀這本書 專業(yè)程序員(能夠提高你的代碼質(zhì)量) 資深設(shè)計(jì)師和架構(gòu)規(guī)劃師(理解為什么需要重構(gòu),哪里需要重構(gòu)) 閱讀技巧...

    acrazing 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<