摘要:構(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
摘要:哪吒社區(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...
摘要:為何重構(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)于書的高清下載連...
摘要:前言決定把責(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...
摘要:并根據(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)) 閱讀技巧...
閱讀 2702·2021-11-08 13:16
閱讀 2379·2021-10-18 13:30
閱讀 2251·2021-09-27 13:35
閱讀 2005·2019-08-30 15:55
閱讀 2455·2019-08-30 13:22
閱讀 594·2019-08-30 11:24
閱讀 2088·2019-08-29 12:33
閱讀 1823·2019-08-26 12:10