一,重新组织函数
1.首先找出局部变量和参数.
1>任何不会被修改的变量都可以当作参数传入.
2.去掉临时变量Replace Temp with Query.用查询函数代替临时变量
3.Extract Method
难点:有局部变量依赖.(用方法返回值的方式去赋回值)
4.Inline Method内联函数(三段式)
5.Introduce Explaining Variable引入解释性变量,(和2相反)
6.Split Temporary Variable(分解临时变量:针对每次赋值,创造一个独立\对应的临时变量)
7.移除对参数的赋值(更明确,不会误解按引用传递和按值传递)
8.已函数对象取代函数(将这个函数放进一个独立对象中,如此依赖局部变量就变成了对象内的字段.然后就可以在同一个对象中将这个大型函数分解为多个小型函数)

二,在对象之间搬移特性
1,Move Method(有个函数与所驻类之外的另一个类有过多的交流,调用后者或呗后者调用.那么,在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移出)
2,Move Field(搬移字段,某个字段被其所驻类之外的另一个类更多地用到)
3,Extract Class(提炼类,将相关的字段和函数从旧类搬移到新类)
4,隐藏"委托关系"(客户通过一个委托类去调用另一个对象)
5,引入外加函数(你需要为提供服务的类添加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例)
6,引入本地扩展(用继承或聚合的方式去做类扩展)

三,重新组织数据
1.自封装字段(为类字段建立getter/setter方法,并且只以这个函数访问字段)
2.以对象取代数据值(你有一个数据项,需要与其他数据和行为一起使用才有意义)
3.以字面量常量代替无意义数(宏定义或常量)
4,以子类取代类型码(类继承结构,多态)
5,用state(状态模式)/strategy(策略模式)代替类型码 ([都是用到多态的基本方式]状态模式:多个状态变换,将这些状态子类化,然后由一个state manager来管理这些状态[多态]; 策略模式:将不同算法分配到子类中去)
6,用字段取代子类(你的各个子类的唯一差别只在"返回常量数据"的函数身上,那么修改这些函数,使他们返回超类中的某个(新增)字段,然后销毁子类)[反多态.技巧,Replace Constructor with Factory Method用工厂方法将子类实例化的过程封装在工厂方法里,从而消除对子类的引用]
如:Peopele createMale(){return new Male();};
Peopele p = createMale();

四,简化函数调用
1.Separate Query from Modifer(将查询函数和修改函数分开,类的单一化设计)
2.Replace Parameter with Explicit Methods(以明确函数取代参数)
如:void setValue(String name,int value){if xxxx}
改为两个语义化且明确的方法名:
void setName(){};
void setValue(){};
3.引入参数对象(有利弊,会引入结构依赖)
4.以工厂函数取代构造函数
如:Peopele createMale(){return new Male();};
Peopele p = createMale();

参考资料:<重构:改善既有代码的设计>

最新文章

  1. Javascript实现时间转换为多少天前
  2. Android常用组件之AutoCompleteTextView
  3. c++ 类的静态变量
  4. HTTP2.0的二进制分帧
  5. Target:IG
  6. 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
  7. SharePoint 2013 Installation and Configuration Issues
  8. C#常用功能函数小结(.NET 4.5)
  9. yii2数据修改|联查
  10. win php nginx 配置小细节
  11. multiselect获取选中的多个下拉项的值(逗号分割的字符串)
  12. Linq XML
  13. Android 之 Window、WindowManager 与窗口管理
  14. hibernate---关联关系的 crud_cascade_fetch
  15. 2017计算机学科夏令营上机考试-C:岛屿面积
  16. Django 2.0 学习(03):Django视图和URL(下)
  17. 高斯消元(Gauss消元)
  18. Java核心技术及面试指南面试题,基本数据类型、封装类和运算操作的面试题
  19. erlang安装
  20. jQuery实时监听input的值变化(input的值产生变化才会触发事件)

热门文章

  1. unable to find resource &#39;xxx\xx\overview.vm&#39; in any resource loader.
  2. angular5 表单元素 checkbox radio 组讲解
  3. XML和Schema
  4. Java JDK5新特性-增强for
  5. [Java学习] Java继承的概念与实现
  6. Tree Cutting (Hard Version) CodeForces - 1118F2 (树形DP,计数)
  7. Three Pieces CodeForces - 1065D (BFS)
  8. CSS样式属性——背景
  9. spring-mvc---Controller参数绑定的类型
  10. @Resource与@Autowired注解的区别