1. 理由
      1. 代码重复
      2. 冗长的子程序
      3. 循环过长或嵌套更深
      4. 内聚性太差的类
      5. 类的接口未能提供层次一致的抽象
      6. 拥有太多参数的参数列表
      7. 变化导致对多个类的相同修改
      8. case语句需要做相同的修改
      9. 某个类同其他类关系过于亲密
      10. 子程序命名不恰当
      11. 数据成员被设置为公用
      12. 注释被用于解释难懂的代码 不要用拙劣的代码编写文档—-应当重写代码
      13. 使用了全局变量
    2. 特定的重构
      1. 数据级
        1. 用具名常量代替神秘数值
        2. 使变量的名字更为清晰且传递更多信息
        3. 将表达式内联化
        4. 引入中间变量
        5. 用函数来代替表达式
        6. 用多个单一用途变量来代替某个多用途变量
        7. 在局部用途中使用局部变量而不是参数
        8. 将一组类型码转化为类或枚举类型
      2. 语句级
        1. 将复杂布尔表达式转换成命名准确的布尔函数
        2. 合并条件语句不同部分中的重复代码片段