From 1634228ad341533ea893f1906d6c3f077c5eebd0 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 4 Mar 2018 15:02:40 +0800 Subject: [PATCH] auto commit --- notes/重构.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/notes/重构.md b/notes/重构.md index 69806117..772db892 100644 --- a/notes/重构.md +++ b/notes/重构.md @@ -1,6 +1,6 @@ -* [第一章 第一个案例](#第一章-第一个案例) -* [第二章 重构原则](#第二章-重构原则) +* [第一个案例](#第一个案例) +* [重构原则](#重构原则) * [定义](#定义) * [为何重构](#为何重构) * [三次法则](#三次法则) @@ -9,7 +9,7 @@ * [何时不该重构](#何时不该重构) * [重构与设计](#重构与设计) * [重构与性能](#重构与性能) -* [第三章 代码的坏味道](#第三章-代码的坏味道) +* [代码的坏味道](#代码的坏味道) * [1. Duplicated Code(重复代码)](#1-duplicated-code重复代码) * [2. Long Method(过长函数)](#2-long-method过长函数) * [3. Large Class(过大的类)](#3-large-class过大的类) @@ -32,9 +32,9 @@ * [20. Data Class(幼稚的数据类)](#20-data-class幼稚的数据类) * [21. Refused Bequest(被拒绝的馈赠)](#21-refused-bequest被拒绝的馈赠) * [22. Comments(过多的注释)](#22-comments过多的注释) -* [第四章 构筑测试体系](#第四章-构筑测试体系) -* [第五章 重构列表](#第五章-重构列表) -* [第六章 重新组织函数](#第六章-重新组织函数) +* [构筑测试体系](#构筑测试体系) +* [重构列表](#重构列表) +* [重新组织函数](#重新组织函数) * [1. Extract Method(提炼函数)](#1-extract-method提炼函数) * [2. Inline Method(内联函数)](#2-inline-method内联函数) * [3. Inline Temp(内联临时变量)](#3-inline-temp内联临时变量) @@ -44,7 +44,7 @@ * [7. Remove Assigments to Parameters(移除对参数的赋值)](#7-remove-assigments-to-parameters移除对参数的赋值) * [8. Replace Method with Method Object(以函数对象取代函数)](#8-replace-method-with-method-object以函数对象取代函数) * [9. Subsititute Algorithn(替换算法)](#9-subsititute-algorithn替换算法) -* [第七章 在对象之间搬移特性](#第七章-在对象之间搬移特性) +* [在对象之间搬移特性](#在对象之间搬移特性) * [1. Move Method(搬移函数)](#1-move-method搬移函数) * [2. Move Field(搬移字段)](#2-move-field搬移字段) * [3. Extract Class(提炼类)](#3-extract-class提炼类) @@ -53,7 +53,7 @@ * [6. Remove Middle Man(移除中间人)](#6-remove-middle-man移除中间人) * [7. Introduce Foreign Method(引入外加函数)](#7-introduce-foreign-method引入外加函数) * [8. Introduce Local Extension(引入本地扩展)](#8-introduce-local-extension引入本地扩展) -* [第八章 重新组织数据](#第八章-重新组织数据) +* [重新组织数据](#重新组织数据) * [1. Self Encapsulate Field(自封装字段)](#1-self-encapsulate-field自封装字段) * [2. Replace Data Value with Object(以对象取代数据值)](#2-replace-data-value-with-object以对象取代数据值) * [3. Change Value to Reference(将值对象改成引用对象)](#3-change-value-to-reference将值对象改成引用对象) @@ -70,7 +70,7 @@ * [14. Replace Type Code with Subcalsses(以子类取代类型码)](#14-replace-type-code-with-subcalsses以子类取代类型码) * [15. Replace Type Code with State/Strategy (以 State/Strategy 取代类型码)](#15-replace-type-code-with-statestrategy-以-statestrategy-取代类型码) * [16. Replace Subclass with Fields(以字段取代子类)](#16-replace-subclass-with-fields以字段取代子类) -* [第九章 简化条件表达式](#第九章-简化条件表达式) +* [简化条件表达式](#简化条件表达式) * [1. Decompose Conditional(分解条件表达式)](#1-decompose-conditional分解条件表达式) * [2. Consolidate Conditional Expression(合并条件表达式)](#2-consolidate-conditional-expression合并条件表达式) * [3. Consolidate Duplicate Conditional Fragments (合并重复的条件片段)](#3-consolidate-duplicate-conditional-fragments-合并重复的条件片段) @@ -79,7 +79,7 @@ * [6. Replace Conditional with Polymorphism (以多态取代条件表达式)](#6-replace-conditional-with-polymorphism-以多态取代条件表达式) * [7. Introduce Null Object(引入Null对象)](#7-introduce-null-object引入null对象) * [8. Introduce Assertion(引入断言)](#8-introduce-assertion引入断言) -* [第十章 简化函数调用](#第十章-简化函数调用) +* [简化函数调用](#简化函数调用) * [1. Rename Method(函数改名)](#1-rename-method函数改名) * [2. Add Parameter(添加参数)](#2-add-parameter添加参数) * [3. Remove Parameter(移除参数)](#3-remove-parameter移除参数) @@ -95,7 +95,7 @@ * [13. Encapsulate Downcast(封装向下转型)](#13-encapsulate-downcast封装向下转型) * [14. Replace Error Code with Exception (以异常取代错误码)](#14-replace-error-code-with-exception-以异常取代错误码) * [15. Replace Exception with Test(以测试取代异常)](#15-replace-exception-with-test以测试取代异常) -* [第十一章 处理概括关系](#第十一章-处理概括关系) +* [处理概括关系](#处理概括关系) * [1. Pull Up Field(字段上移)](#1-pull-up-field字段上移) * [2. Pull Up Method(函数上移)](#2-pull-up-method函数上移) * [3. Pull Up Constructor Body(构造函数本体上移)](#3-pull-up-constructor-body构造函数本体上移) @@ -111,7 +111,7 @@ -# 第一章 第一个案例 +# 第一个案例 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构这个程序。 @@ -162,7 +162,7 @@ double getTotalCharge() {

-但是由于 Movie 可以在其生命周期内修改自己的类别,一个对象却不能在生命周期内修改自己所属的内,因此这种方案不可行。可以通过使用策略模式来解决这种问题(原书写的是使用状态模式,但是这里应该为策略模式,具体可以参考设计模式内容)。 +但是由于 Movie 可以在其生命周期内修改自己的类别,一个对象却不能在生命周期内修改自己所属的类,因此这种方案不可行。可以使用策略模式来解决这个问题(原书写的是使用状态模式,但是这里应该为策略模式,具体可以参考设计模式内容)。 下图中,Price 有多种实现,Movie 组合了一个 Price 对象,并且在运行时可以改变组合的 Price 对象,从而使得它的计费方式发生改变。 @@ -174,7 +174,7 @@ double getTotalCharge() {

-# 第二章 重构原则 +# 重构原则 ## 定义 @@ -230,7 +230,7 @@ double getTotalCharge() { 应当只关注关键代码的性能,因为只有一小部分的代码是关键代码。 -# 第三章 代码的坏味道 +# 代码的坏味道 ## 1. Duplicated Code(重复代码) @@ -344,7 +344,7 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl 使用 Extract Method 提炼出需要注释的部分,然后用函数名来解释函数的行为。 -# 第四章 构筑测试体系 +# 构筑测试体系 Java 可以使用 Junit 进行单元测试。 @@ -352,11 +352,11 @@ Java 可以使用 Junit 进行单元测试。 应当集中测试可能出错的边界条件。 -# 第五章 重构列表 +# 重构列表 小步前进,频繁测试。 -# 第六章 重新组织函数 +# 重新组织函数 ## 1. Extract Method(提炼函数) @@ -458,7 +458,7 @@ int discount (int inputVal, int quentity, int yearToDate){ ## 9. Subsititute Algorithn(替换算法) -# 第七章 在对象之间搬移特性 +# 在对象之间搬移特性 ## 1. Move Method(搬移函数) @@ -532,7 +532,7 @@ Hide Delegate 有很大好处,但是它的代价是:每当客户要使用受 和 Introduce Foreign Method 目的一样,但是 Introduce Local Extension 通过建立新的类来实现。有两种方式:子类或者包装类,子类就是通过继承实现,包装类就是通过组合实现。 -# 第八章 重新组织数据 +# 重新组织数据 ## 1. Self Encapsulate Field(自封装字段) @@ -643,7 +643,7 @@ public 字段应当改为 private,并提供相应的访问函数。

-# 第九章 简化条件表达式 +# 简化条件表达式 ## 1. Decompose Conditional(分解条件表达式) @@ -790,7 +790,7 @@ double getExpenseLimit() { } ``` -# 第十章 简化函数调用 +# 简化函数调用 ## 1. Rename Method(函数改名) @@ -965,7 +965,7 @@ double getValueForPeriod(int periodNumber) { return values[periodNumber]; ``` -# 第十一章 处理概括关系 +# 处理概括关系 ## 1. Pull Up Field(字段上移)