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