症状●代码体中出现了常量(除了空串;还包括0、1,可能还有2;还有其他一些基本情况)。原因有人可能需要某个值,因此就将这样一个值置于代码中。就其本身而言,也许这并不算很糟糕,但是通常还存在另外一些由该值派生或依赖于它的...[继续阅读]
海量资源,尽在掌握
症状●代码体中出现了常量(除了空串;还包括0、1,可能还有2;还有其他一些基本情况)。原因有人可能需要某个值,因此就将这样一个值置于代码中。就其本身而言,也许这并不算很糟糕,但是通常还存在另外一些由该值派生或依赖于它的...[继续阅读]
症状●容易形式(easyform):两个代码段看上去几乎相同。●困难形式(hardform):两个代码段都拥有几乎相同的作用(无论在哪个概念层次上)。原因由于程序员们通常独立地开发系统的不同部分,因此就会出现一些重复,而他们并没有意识到会...[继续阅读]
症状●两个类看上去完成同样的工作,但却使用了不同的方法名。原因人们会创建类似的代码来处理类似的情况,而未曾意识到还存在着与之类似的代码。采取的措施协调各个类,使之取得一致,从而可以去除其中某个类。1.采用重命名...[继续阅读]
习题13两个库(有难度)。集成由不同来源得到的两个模块。每个模块有其自己的日志记录方法。系统A:packagecom.fubar.log;publicfinalclassLog{publicintINFO=1,WARN=2,ERROR=3,FATAL=4;publicstaticvoidsetLog(Filef){…}publicstaticvoidlog(intlevel,Stringmsg){…}}代码中出...[继续阅读]
●Null检查(NullCheck)●复杂的布尔表达式(ComplicatedBooleanExpression)●特殊用例(SpecialCase)●模拟继承(Switch语句)[SimulatedInheritance(SwitchStatement)]...[继续阅读]
症状●如下代码反复出现:if(xxx==null)...原因有人认为:“可以将null用作为默认值”。基于这种想法,可以避免初始化某些字段的麻烦,或者不必考虑创建某些对象,也有可能是对某种意料之外的情况所做出的应对策略。引入null检查是为了...[继续阅读]
症状●代码中存在复杂的条件,其中涉及到and、or和not。原因代码可能从一开始就很复杂,也可能在开发过程中加入了额外的条件。采取的措施●应用DeMorgan法则:!(a&&b)=>(!a)||(!b)和!(a||b)=>(!a)&&(!b)你会发现,如果将某些变量...[继续阅读]
症状●复杂的if语句●在做工作之前检查某些特定的值(尤其是与常量或枚举变量进行比较)原因有人认为需要一种特殊用例。采取的措施●如果条件式取代了多态,则采用将条件式替换为多态(ReplaceConditionalwithPolymorphism)。●如果if和...[继续阅读]
症状●代码使用了一个switch语句(尤其是对一个类型字段)。●代码在某一行上存在多个if语句(特别是对同一个值进行比较时)。●代码使用了instanceof(或其等价形式)来确定所处理的是何种类型。原因之所以会出现这种坏味道,通常是由...[继续阅读]
以下所列的是Gamma的《设计模式》中描述的一组设计模式。若要对这些模式加以发展,可以采用哪些重构技术?创建型模式(CreationalPatterns)__抽象工厂模式(AbstractFactory)__生成器模式(Builder)__工厂方法模式(FactoryMethod)__原型模式(Prototype)_...[继续阅读]