重構與模式

2021-06-08 16:29:24 字數 4166 閱讀 7698

《設計模式》和《重構》之後又一里程碑式著作,凝聚眾多業界專家經驗與領悟,幫你打通重構與模式任督二脈。

2023年,《設計模式》為我們帶來了常見設計問題的經典解決方案,從而改變了整個物件導向開發的面貌。 

2023年,《重構》為我們帶來了一種改進**的高效過程,從而徹底改變了物件導向設計的方式。 

現在,在眾所期盼之中,joshua kerievsky的《重構與模式》第一次深入和全面地論述了設計模式的運用與演進式的重構過程,並揭示了兩者之間至關重要的聯絡,又一次革命性地改變了我們的設計方式。 重構與模式,本書開創性地深入揭示了重構與模式這兩種軟體開發關鍵技術之間的聯絡。

本書的寫作緣由 1

1.1 過度設計 1

1.2 模式萬靈丹 2

1.3 設計不足 2

1.4 測試驅動開發和持續重構 3

1.5 重構與模式 5

1.6 演進式設計 6

重構 7

2.1 何謂重構 7

2.2 重構的動機 8

2.3 眾目睽睽 9

2.4 可讀性好的** 10

2.5 保持清晰 11

2.6 循序漸進 11

2.7 設計欠賬 12

2.8 演變出新的架構 13

2.9 復合重構與測試驅動的重構 13

2.10 復合重構的優點 15

2.11 重構工具 15

模式 17

3.1 何謂模式 17

3.2 模式痴迷 18

3.3 實現模式的方式不止一種 20

3.4 通過重構實現、趨向和去除模式 22

3.5 模式是否會使**更加複雜 24

3.6 模式知識 25

3.7 使用模式的預先設計 26

**壞味 29

4.1 重複**(duplicated code) 31

4.2 方法過長(long method) 31

4.3 條件邏輯太複雜(conditional complexity) 32

4.4 基本型別迷戀(primitive obsession) 33

4.5 不恰當的暴露(indecent exposure) 33

4.6 解決方案蔓延(solution sprawl) 34

4.7 異曲同工的類(alternative classes with different inte***ces) 34

4.8 冗贅類(lazy class) 34

4.9 類過大(large class) 34

4.10 分支語句(switch statement) 35

4.11 組合**(combinatorial explosion) 35

4.12 怪異解決方案(oddball solution) 35

模式導向的重構目錄 37

5.1 重構的格式 37

5.2 本目錄中引用的專案 38

5.2.1 xml builder 39

5.2.2 html parser 39

5.2.3 貸款風險計算程式 40

5.3 起點 40

5.4 學習順序 41

建立 43

6.1 用creation method替換建構函式 44

6.1.1 動機 44

6.1.2 做法 46

6.1.3 示例 46

6.1.4 變體 51

6.2 將建立知識搬移到factory 52

6.2.1 動機 53

6.2.2 做法 55

6.2.3 示例 56

6.3 用factory封裝類 61

6.3.1 動機 62

6.3.2 做法 63

6.3.3 示例 63

6.3.4 變體 66

6.4 用factory method引入多型建立 68

6.4.1 動機 68

6.4.2 做法 69

6.4.3 示例 71

6.5 用builder封裝composite 74

6.5.1 做法 76

6.5.2 示例 77

6.5.3 變體 87

6.6 內聯singleton 90

6.6.1 動機 90

6.6.2 做法 92

6.6.3 示例 93

簡化 97

7.1 組合方法 98

7.1.1 動機 98

7.1.2 做法 100

7.1.3 示例 100

7.2 用strategy替換條件邏輯 103

7.2.1 動機 103

7.2.2 做法 105

7.2.3 示例 106

7.3 將裝飾功能搬移到decorator 115

7.3.1 動機 115

7.3.2 做法 119

7.3.3 示例 120

7.4 用state替換狀態改變條件語句 134

7.4.1 動機 134

7.4.2 做法 135

7.4.3 示例 136

7.5 用composite替換隱含樹 144

7.5.1 動機 144

7.5.2 做法 147

7.5.3 示例 148

7.6 用command替換條件排程程式 155

7.6.1 動機 156

7.6.2 做法 157

7.6.3 示例 158

泛化 165

8.1 形成template method 166

8.1.1 動機 167

8.1.2 做法 168

8.1.3 示例 168

8.2 提取composite 173

8.2.1 動機 173

8.2.2 做法 174

8.2.3 示例 175

8.3 用composite替換一/多之分 181

8.3.1 動機 181

8.3.2 做法 183

8.3.3 示例 184

8.4 用observer替換硬編碼的通知 191

8.4.1 動機 191

8.4.2 做法 192

8.4.3 示例 193

8.5 通過adapter統一介面 200

8.5.1 動機 200

8.5.2 做法 201

8.5.3 示例 202

8.6 提取adapter 209

8.6.1 動機 209

8.6.2 做法 211

8.6.3 示例 211

8.6.4 變體 217

8.7 用interpreter替換隱式語言 218

8.7.1 動機 218

8.7.2 做法 220

8.7.3 示例 221

保護 231

9.1 用類替換型別** 232

9.1.1 動機 232

9.1.2 做法 234

9.1.3 示例 235

9.2 用singleton限制例項化 240

9.2.1 動機 240

9.2.2 做法 241

9.2.3 示例 241

9.3 引入null object 243

9.3.1 動機 244

9.3.2 做法 245

9.3.3 示例 246

聚集操作 251

10.1 將聚集操作搬移到collecting parameter 252

10.1.1 動機 252

10.1.2 做法 253

10.1.3 示例 254

10.2 將聚集操作搬移到visitor 258

10.2.1 動機 258

10.2.2 做法 262

10.2.3 示例 266

實用重構 273

11.1 鏈建構函式 274

11.1.1 動機 274

11.1.2 做法 275

11.1.3 示例 275

11.2 統一介面 277

11.2.1 動機 277

11.2.2 做法 278

11.2.3 示例 278

11.3 提取引數 279

11.3.1 動機 279

11.3.2 做法 279

11.3.3 示例 280

跋 281

參考文獻 283

索引 287

重構與模式

b 重構的第一步 b 如果你發現自己需要為程式新增乙個特性,而 結構使你無法很方便地那麼做,那就先重構那個程式,使特性的新增比較容易進行,然後再新增特性。首先得在 中找出函式內的區域性變數和引數,任何不會被修改的變數都可以被我當成引數傳入新的函式,至於會被修改的變數就需格外小心。如果只有乙個變數會被...

重構與模式(一)

重構就是一種 保持行為的轉換 是一種對軟體內部結構的改善,目的是在不改變軟體的可見行為的情況下,使其更容易理解,修改的成本更低 重構過程包括去處重複,簡化複雜邏輯和澄清模糊的 重構是,需要對 的無情針砭,以改進其設計。這種改進可能很小,比如只是乙個變數名,也可能很大比如合併類。重構的動機,比較具有普...

敏捷開發 重構與設計模式

最近,同事 朋友跟我聊天的過程中,提到了設計模式方方面面的問題。隨著物件導向 敏捷開發的深入人心,越來越多的程式設計師希望能夠借助設計模式,使自己的 更利於重用 更利於被人理解 可靠性更 不同的情況下需要用什麼樣的模式,如何實現這些模式,在各類著作中已經介紹的相當清晰了,但是關於設計模式實現的時機,...