Skip to content

Commit

Permalink
auto commit
Browse files Browse the repository at this point in the history
  • Loading branch information
CyC2018 committed Mar 4, 2018
1 parent 1da18aa commit 1634228
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions notes/重构.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!-- GFM-TOC -->
* [第一章 第一个案例](#第一章-第一个案例)
* [第二章 重构原则](#第二章-重构原则)
* [第一个案例](#第一个案例)
* [重构原则](#重构原则)
* [定义](#定义)
* [为何重构](#为何重构)
* [三次法则](#三次法则)
Expand All @@ -9,7 +9,7 @@
* [何时不该重构](#何时不该重构)
* [重构与设计](#重构与设计)
* [重构与性能](#重构与性能)
* [第三章 代码的坏味道](#第三章-代码的坏味道)
* [代码的坏味道](#代码的坏味道)
* [1. Duplicated Code(重复代码)](#1-duplicated-code重复代码)
* [2. Long Method(过长函数)](#2-long-method过长函数)
* [3. Large Class(过大的类)](#3-large-class过大的类)
Expand All @@ -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内联临时变量)
Expand All @@ -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提炼类)
Expand All @@ -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将值对象改成引用对象)
Expand All @@ -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-合并重复的条件片段)
Expand All @@ -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移除参数)
Expand All @@ -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构造函数本体上移)
Expand All @@ -111,7 +111,7 @@
<!-- GFM-TOC -->


# 第一章 第一个案例
# 第一个案例

如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构这个程序。

Expand Down Expand Up @@ -162,7 +162,7 @@ double getTotalCharge() {

<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//76b48b4c-8999-4967-893b-832602e73285.png"/> </div><br>

但是由于 Movie 可以在其生命周期内修改自己的类别,一个对象却不能在生命周期内修改自己所属的内,因此这种方案不可行。可以通过使用策略模式来解决这种问题(原书写的是使用状态模式,但是这里应该为策略模式,具体可以参考设计模式内容)。
但是由于 Movie 可以在其生命周期内修改自己的类别,一个对象却不能在生命周期内修改自己所属的类,因此这种方案不可行。可以使用策略模式来解决这个问题(原书写的是使用状态模式,但是这里应该为策略模式,具体可以参考设计模式内容)。

下图中,Price 有多种实现,Movie 组合了一个 Price 对象,并且在运行时可以改变组合的 Price 对象,从而使得它的计费方式发生改变。

Expand All @@ -174,7 +174,7 @@ double getTotalCharge() {

<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//8c139711-3500-4f71-8456-c1adaf429ad0.png"/> </div><br>

# 第二章 重构原则
# 重构原则

## 定义

Expand Down Expand Up @@ -230,7 +230,7 @@ double getTotalCharge() {

应当只关注关键代码的性能,因为只有一小部分的代码是关键代码。

# 第三章 代码的坏味道
# 代码的坏味道

## 1. Duplicated Code(重复代码)

Expand Down Expand Up @@ -344,19 +344,19 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl

使用 Extract Method 提炼出需要注释的部分,然后用函数名来解释函数的行为。

# 第四章 构筑测试体系
# 构筑测试体系

Java 可以使用 Junit 进行单元测试。

单元测试的对象是类的方法,而功能测以客户的角度保证软件正常运行。

应当集中测试可能出错的边界条件。

# 第五章 重构列表
# 重构列表

小步前进,频繁测试。

# 第六章 重新组织函数
# 重新组织函数

## 1. Extract Method(提炼函数)

Expand Down Expand Up @@ -458,7 +458,7 @@ int discount (int inputVal, int quentity, int yearToDate){

## 9. Subsititute Algorithn(替换算法)

# 第七章 在对象之间搬移特性
# 在对象之间搬移特性

## 1. Move Method(搬移函数)

Expand Down Expand Up @@ -532,7 +532,7 @@ Hide Delegate 有很大好处,但是它的代价是:每当客户要使用受

Introduce Foreign Method 目的一样,但是 Introduce Local Extension 通过建立新的类来实现。有两种方式:子类或者包装类,子类就是通过继承实现,包装类就是通过组合实现。

# 第八章 重新组织数据
# 重新组织数据

## 1. Self Encapsulate Field(自封装字段)

Expand Down Expand Up @@ -643,7 +643,7 @@ public 字段应当改为 private,并提供相应的访问函数。

<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//f2e0cee9-ecdc-4a96-853f-d9f6a1ad6ad1.jpg"/> </div><br>

# 第九章 简化条件表达式
# 简化条件表达式

## 1. Decompose Conditional(分解条件表达式)

Expand Down Expand Up @@ -790,7 +790,7 @@ double getExpenseLimit() {
}
```

# 第十章 简化函数调用
# 简化函数调用

## 1. Rename Method(函数改名)

Expand Down Expand Up @@ -965,7 +965,7 @@ double getValueForPeriod(int periodNumber) {
return values[periodNumber];
```

# 第十一章 处理概括关系
# 处理概括关系

## 1. Pull Up Field(字段上移)

Expand Down

0 comments on commit 1634228

Please sign in to comment.