癥狀●代碼體中出現(xiàn)了常量(除了空串;還包括0、1,可能還有2;還有其他一些基本情況)。原因有人可能需要某個(gè)值,因此就將這樣一個(gè)值置于代碼中。就其本身而言,也許這并不算很糟糕,但是通常還存在另外一些由該值派生或依賴于它的...[繼續(xù)閱讀]
海量資源,盡在掌握
癥狀●代碼體中出現(xiàn)了常量(除了空串;還包括0、1,可能還有2;還有其他一些基本情況)。原因有人可能需要某個(gè)值,因此就將這樣一個(gè)值置于代碼中。就其本身而言,也許這并不算很糟糕,但是通常還存在另外一些由該值派生或依賴于它的...[繼續(xù)閱讀]
癥狀●容易形式(easyform):兩個(gè)代碼段看上去幾乎相同。●困難形式(hardform):兩個(gè)代碼段都擁有幾乎相同的作用(無論在哪個(gè)概念層次上)。原因由于程序員們通常獨(dú)立地開發(fā)系統(tǒng)的不同部分,因此就會(huì)出現(xiàn)一些重復(fù),而他們并沒有意識(shí)到會(huì)...[繼續(xù)閱讀]
癥狀●兩個(gè)類看上去完成同樣的工作,但卻使用了不同的方法名。原因人們會(huì)創(chuàng)建類似的代碼來處理類似的情況,而未曾意識(shí)到還存在著與之類似的代碼。采取的措施協(xié)調(diào)各個(gè)類,使之取得一致,從而可以去除其中某個(gè)類。1.采用重命名...[繼續(xù)閱讀]
習(xí)題13兩個(gè)庫(kù)(有難度)。集成由不同來源得到的兩個(gè)模塊。每個(gè)模塊有其自己的日志記錄方法。系統(tǒng)A:packagecom.fubar.log;publicfinalclassLog{publicintINFO=1,WARN=2,ERROR=3,FATAL=4;publicstaticvoidsetLog(Filef){…}publicstaticvoidlog(intlevel,Stringmsg){…}}代碼中出...[繼續(xù)閱讀]
●Null檢查(NullCheck)●復(fù)雜的布爾表達(dá)式(ComplicatedBooleanExpression)●特殊用例(SpecialCase)●模擬繼承(Switch語句)[SimulatedInheritance(SwitchStatement)]...[繼續(xù)閱讀]
癥狀●如下代碼反復(fù)出現(xiàn):if(xxx==null)...原因有人認(rèn)為:“可以將null用作為默認(rèn)值”?;谶@種想法,可以避免初始化某些字段的麻煩,或者不必考慮創(chuàng)建某些對(duì)象,也有可能是對(duì)某種意料之外的情況所做出的應(yīng)對(duì)策略。引入null檢查是為了...[繼續(xù)閱讀]
癥狀●代碼中存在復(fù)雜的條件,其中涉及到and、or和not。原因代碼可能從一開始就很復(fù)雜,也可能在開發(fā)過程中加入了額外的條件。采取的措施●應(yīng)用DeMorgan法則:!(a&&b)=>(!a)||(!b)和!(a||b)=>(!a)&&(!b)你會(huì)發(fā)現(xiàn),如果將某些變量...[繼續(xù)閱讀]
癥狀●復(fù)雜的if語句●在做工作之前檢查某些特定的值(尤其是與常量或枚舉變量進(jìn)行比較)原因有人認(rèn)為需要一種特殊用例。采取的措施●如果條件式取代了多態(tài),則采用將條件式替換為多態(tài)(ReplaceConditionalwithPolymorphism)。●如果if和...[繼續(xù)閱讀]
癥狀●代碼使用了一個(gè)switch語句(尤其是對(duì)一個(gè)類型字段)?!翊a在某一行上存在多個(gè)if語句(特別是對(duì)同一個(gè)值進(jìn)行比較時(shí))。●代碼使用了instanceof(或其等價(jià)形式)來確定所處理的是何種類型。原因之所以會(huì)出現(xiàn)這種壞味道,通常是由...[繼續(xù)閱讀]
以下所列的是Gamma的《設(shè)計(jì)模式》中描述的一組設(shè)計(jì)模式。若要對(duì)這些模式加以發(fā)展,可以采用哪些重構(gòu)技術(shù)?創(chuàng)建型模式(CreationalPatterns)__抽象工廠模式(AbstractFactory)__生成器模式(Builder)__工廠方法模式(FactoryMethod)__原型模式(Prototype)_...[繼續(xù)閱讀]