百人牛牛棋牌
人人都懂設計模式:從生活中領悟設計模式(Python實現)
  • 推薦1
  • 收藏5
  • 瀏覽914

人人都懂設計模式:從生活中領悟設計模式(Python實現)

羅偉富 (作者)  董英 (責任編輯)

  • 書  號:978-7-121-36112-8
  • 出版日期:2019-04-01
  • 頁  數:
  • 開  本:
  • 出版狀態:圖書立項
  • 維護人:董英

相關圖書

深度剖析Apache Dubbo核心技術內幕

翟陸續 (作者)

Dubbo是阿里巴巴開發的一個開源的高性能、高可用、可擴展的分布式RPC調用框架,致力于提供高性能和透明化的 RPC 遠程調用服務解決方案。作為阿里巴巴 SOA...

 

Offer來了:Java面試核心知識點精講(原理篇)

王磊 (作者)

本書是對Java程序員面試必備知識點的總結,詳細講解了JVM原理、多線程、數據結構和算法、分布式緩存、設計模式等面試必備知識點,在講解時不拖泥帶水,力求精簡。 ...

 

Java持續交付

Daniel Bryant (作者) 張若飛 (譯者)

隨著Java 8的發布,以及Spring引導等web/微服務框架的可用性,設計和實現Java驅動的應用程序從來都不是一個更好的時機。但是,在不斷向生產環境交付工...

¥119.00

讀故事學編程——Python王國歷險記(雙色)

李偉 (作者)

這是一本故事書,也是一本編程書。<br>小男孩派森無意中闖入神秘國度—Python 王國,恰好遇到了國王的鸚鵡,于是他們開始了奇幻的冒險之旅。在這個過程中,他們...

¥69.00

全棧技能修煉:使用Angular 和 SpringBoot 打造全棧應用

王芃 (作者)

本書涉及很多平臺、框架和類庫等,主要有前端使用的Angular,后端使用的Spring Boot框架、Spring Security安全框架,數據庫涉及Mong...

¥109.00

21天學通HTML5+CSS3(第2版)

張啟玉 劉剛 (作者)

本書全面、系統、深入地講解了HTML5+CSS3網頁設計與編程的基礎知識與高級應用。在講解過程中,通過大量取自實際操作的案例,將網頁開發知識全面、系統、深入地呈...

¥89.90
設計模式(Design Pattern)是一套被反復使用、多數人知曉的、無數工程師實踐的代碼設計經驗的總結,它是面向對象思想的高度提煉和模板化。使用設計模式將會讓代碼具有更高的可重用性、更好的靈活性和可拓展性、更容易閱讀和理解。本書分三部分內容:基礎篇(第01~21章),19 種常用設計模式單獨章節講解 + 剩余 4 種模式合集(會有1~2篇的篇幅);進階篇(第22~25章),是基礎設計模式的衍生,也是各大編程語言中非常重要而常見的種編程機制;經驗篇(第26~28章),將會分享我對設計原則、設計模式、項目重構的經驗和看法。
設計模式(Design Pattern)是一套被反復使用、多數人知曉的、無數工程師實踐的代碼設計經驗的總結,它是面向對象思想的高度提煉和模板化。本書力求用最通俗的語言闡述最難懂的概念;用最簡單的語法實現最復雜的邏輯;用最短小的代碼寫出最強悍的程序!
羅偉富(Spencer.Luo)
CSDN博客專家,阿里云棲社區專家。3年電子書SDK開發,2年客戶端開發,1年后端開發,從底層到應用層,從前端到后端,積累了豐富的開發經驗,熟悉C++、Java、Python、PHP等多種開發語言。熱愛生活、喜歡技術、善于用生活場景解讀難懂的技術!
個人網站:sunlogging.com/
前言

三年前,CSDN推出了一個產品——ink,旨在提供一個高質量寫作環境。那時,我想寫一系列關于設計模式的文章,于是就在ink里開始寫作,陸陸續續寫了三篇文章,后來不知道什么原因這個產品下架了,我的三篇文章也沒了,這事也就一直被我擱置下來。直到2017年,知識付費盛行,各類付費的社區、產品如雨后春筍般崛起,而技術類的付費閱讀產品更是大行其道(GitChat便是其中一種)。在GitChat的盛情邀請之下,我寫作設計模式這一系列文章的想法又重新被點燃。2017年年底,我開始在GitChat上寫“從生活中領悟設計模式(Python)”課程。2018年,我對這一課程進行了一次升級。
隨著這一課程被越來越多的讀者熟知,不少出版社編輯找到我,他們覺得這一課程的內容非常有特色,希望能把它重新整理,仔細打磨,出版成書,于是便有了本書。
本書的特色
設計模式作為面向對象程序的設計思想和方法論,本身是非常抽象和難以理解的,需要有一定的代碼量和編程經驗才能更深入地理解。如果能用一種有趣的方式來講解設計模式,將會使這些枯燥乏味的概念變得更易于理解!
本書每一章以一個輕松有趣的小故事開始,然后用代碼來模擬故事劇情,再從模擬代碼中逐步提煉出設計模式的模型和原理,最后配合一個具體的應用案例,告訴你每一種模式的使用方法和應用場景。以由淺入深的方式帶你了解每一種模式,思考每一種模式,總結每一種模式。
本書力求用更通俗的語言闡述難懂的概念,用更簡單的語法實現復雜的邏輯,用更短小的代碼寫出強悍的程序!希望能帶給讀者一種全新的閱讀體驗和思考方式。
內容概述
本書分為3篇:

? “基礎篇”講解了23種經典設計模式,其中19 種常用設計模式分別用單獨的章節講解,其余設計模式作為一個合集放在一章中講解;
? “進階篇”講解了由基礎設計模式衍生出的各種編程機制,包括過濾器模式、對象池技術、回調機制和MVC模式,它們在各大編程語言中都非常重要而且常見;
? “經驗篇”結合工作經驗和項目積累,分享了對設計模式、設計原則、項目重構的理解和看法。
讀者對象
一線互聯網軟件開發者
如果你想提升面向對象的思維方式,提高自己的軟件設計能力,本書會對你非常有幫助。本書每一章會抽象和總結出對應設計模式的模型和原理,并結合具體的應用案例告訴你該模式的應用場景、特點和注意事項。
IT職場新人
如果你是IT新人,想通過學習設計模式來提升自己的技術能力和代碼理解能力,本書將非常適合你。本書每一章以一個輕松有趣的小故事開始,由淺入深地講述一個模式,讓你輕松愉悅地學會每一種模式。
對設計模式和編程思想感興趣的人士
設計模式能讓你的代碼具有更高的可重用性、更好的靈活性和可拓展性,更易被人閱讀和理解,因此學習設計模式是每一個程序員編程生涯中必不可少的一個環節。
為什么叫設計模式
什么是設計模式
設計模式最初是由GoF于1995年提出的。GoF全稱是Gang of Four(四人幫),即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。他們四人于1995年出版了一本書Design Patterns: Elements of Reusable Object-Oriented Software(翻譯成中文是《設計模式:可復用面向對象軟件的基礎》),第一次將設計模式提升到理論高度,并將之規范化,該書提出了23種經典的設計模式。
設計模式是一套被反復使用、多數人知曉、無數工程師實踐的代碼設計經驗的總結,它是面向對象思想的高度提煉和模板化。使用設計模式是為了讓代碼具有更高的可重用性、更好的靈活性和可拓展性,更易被人閱讀和理解。
設計模式與生活有什么聯系
我一直堅信:程序源于生活,又高于生活!程序的靈魂在于思維的方式,而思維的靈感來源于精彩的生活。互聯網是一個虛擬的世界,而程序本身就是對生活場景的虛擬和抽象,每一種模式我都能在生活中找到它的影子。比如,說到狀態模式,我能想到水有固、液、氣三種狀態,而人也有少、壯、老三個階段;提起中介模式,我能立刻想到房產中介;看到裝飾模式,我能聯想到人的穿衣搭配……
設計模式是面向對象的高度抽象和總結,而越抽象的東西越難以理解。本書的寫作目的就是降低設計模式的閱讀門檻,以生活中的小故事開始,用風趣的方式,由淺入深地講述每一種模式。讓你再次看到設計模式時,不覺得它只是一種模式,還是生活中的一個“小確幸”!程序不是冷冰冰的代碼,它還有生活的樂趣和特殊意義。
為什么要學設計模式
設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗總結出來的。所以不管你是新手還是老手,學習設計模式對你都有莫大的幫助。
學習設計模式的理由有很多,這里只列出幾個最現實的:
(1)擺脫面試的窘境,不管你是前端工程師還是后端工程師,或是全端工程師,設計模式都是不少面試官必問的。
(2)讓你的程序設計能力有一個質的提升,不再寫一堆結構復雜、難以維護的爛代碼。
(3)使你對面向對象的思想有一個更高層次的理解。
如何進行學習
熟悉一門面向對象語言
首先,你至少要熟悉一門面向對象的計算機語言。如果沒有,請根據自己的興趣、愛好或希望從事的工作,先選擇一門面向對象語言(C++、Java、Go等都可以)進行學習和實戰,對抽象、繼承、多態、封裝有一定的基礎之后,再來閱讀本書。
了解Python的基本語法
對Python的基本語法有一個簡單了解。Python的語法非常簡單,只要你有一定的(其他)編程語言基礎,通過“第0章 啟程之前,請不要錯過我”的學習就能很快地理解Python的語法。
學會閱讀UML圖
UML(Unified Modeling Language)稱為統一建模語言或標準建模語言,是面向對象軟件的標準化建模語言。UML類圖表示不同的實體(人、事物和數據)如何彼此相關,換句話說,它顯示了系統的靜態結構。想進一步了解類圖中的各種關系,可參考閱讀“第0章 啟程之前,請不要錯過我”的“0.2 UML精簡概述”部分。
閱讀本書
通過閱讀本書內容,可以輕松愉快地學習設計模式和編程思想。本書“基礎篇”“進階篇”“經驗篇”的內容是逐步進階和提升的,但每一篇內的不同章之間是沒有閱讀的先后順序的(第0章和有特殊說明的除外),每一章都單獨成文,可從任意一章開始閱讀。例如,對于基礎篇的23種設計模式,你可以從中任意挑選一章開始閱讀。
為什么選擇Python
雖然設計模式與編程語言沒有關系,它是對面向對象思想的靈活應用和高度概括,你可以用任何一種語言來實現它,但總歸是需要用一種語言進行舉例的。本書的所有示例代碼均使用Python編寫(有特殊說明的除外),選擇Python主要基于以下兩個原因。
彌補市場空缺
設計模式于1995由GoF提出,被廣泛應用于熱門的面向對象語言。目前用Java、C++描述的設計模式的書籍和資料已經非常多了,但用Python來描述的真是太少了;我在當當網上搜索“Python設計模式”,只有零星的幾本書。而對于編程語言中排名前三的Python語言,這明顯是不夠的。Python已經越來越成熟,也越來越多地被使用,作為一個有技術追求的IT人,有必要了解一下基于Python代碼的設計模式。
大勢所趨,Python已然成風
C語言誕生于1972年,卻隨著UNIX的誕生才深深根植于各大操作系統;C++誕生于1983年,卻因微軟的可視化桌面操作系統才得以廣泛傳播;Java誕生于1995年,卻因互聯網的迅速崛起才變得家喻戶曉;Python誕生于1991年,而下一場技術革命已然開始,AI時代已然到來,在AI領域中已經被廣泛使用的Python必將成為下一個時代的第一開發語言!
最熱門的AI開源框架PyTorch和TensorFlow都已經采用了Python作為接口和開發語言。除此之外,還有一堆AI相關的框架庫,也都紛紛采用了Python,如SKlearn、PyML等。一門如此有前途的語言,我們必然是要去學習和使用的。
勘誤和支持
由于本人水平和經驗有限,書中難免會有一些錯誤或理解不準確的地方,懇請廣大讀者批評指正。
如果你在閱讀過程中發現錯誤,或有更好的建議,歡迎發郵件給我(E-mail:[email protected] 126.com,永久有效)。
最新的勘誤內容可通過以下方式查看:關注公眾號“SunLogging”,在菜單欄中選擇“我的書箱”→“最新勘誤”。
致謝
從在GitChat上寫課程,到與出版社合作,寫完本書的書稿,大概經歷了一年半的時間,經過無數次與編輯的反復校對。寫作是一件非常考驗人耐心和細心的事,為了讓讀者更易理解,有些章節我進行了反復的推敲和修改。比如,為了講清楚單例模式的每一種實現方式的原理,硬是增加了兩個附錄,閱讀了十幾篇文章,并做了驗證性的實驗,整整花了三周時間才寫完。
感謝每一位在本書寫作過程中給予幫助的人,是你們的鼓勵和支持,才讓本書能順利完成。在此,要特別感謝電子出版社的首席策劃編輯董英,在寫書過中給予的諸多建議;也感謝GitChat的編輯馬翠翠,在寫線上課程“從生活中領悟設計模式(Python)”時給予的很多幫助;還要感謝Sophia“小朋友”,在封面設計過程中提出的非常細致的改進意見!最后,我也要感謝我的朋友和同事對我寫書的鼓勵和支持。
還要感謝Sophia“小朋友”,在封面設計過程中提出的非常細致的改進意見!

目錄

目錄


基 礎 篇
第0章 啟程之前,請不要錯過我 2
0.1 Python精簡入門 2
0.1.1 Python的特點 2
0.1.2 基本語法 3
0.1.3 一個例子讓你頓悟 7
0.1.4 重要說明 11
0.2 UML精簡概述 11
0.2.1 UML的定義 11
0.2.2 常見的關系 12
第1章 監聽模式 16
1.1 從生活中領悟監聽模式 16
1.1.1 故事劇情—幻想中的智能熱水器 16
1.1.2 用程序來模擬生活 17
1.2 從劇情中思考監聽模式 19
1.2.1 什么是監聽模式 19
1.2.2 監聽模式設計思想 19
1.3 監聽模式的模型抽象 19
1.3.1 代碼框架 19
1.3.2 類圖 20
1.3.3 基于框架的實現 21
1.3.4 模型說明 22
1.4 實戰應用 23
1.5 應用場景 26
第2章 狀態模式 28
2.1 從生活中領悟狀態模式 28
2.1.1 故事劇情—人有少、壯、老,水之固、液、氣 28
2.1.2 用程序來模擬生活 29
2.2 從劇情中思考狀態模式 32
2.2.1 什么是狀態模式 32
2.2.2 狀態模式設計思想 33
2.3 狀態模式的模型抽象 33
2.3.1 代碼框架 33
2.3.2 類圖 35
2.3.3 基于框架的實現 36
2.3.4 模型說明 38
2.4 應用場景 39
第3章 中介模式 40
3.1 從生活中領悟中介模式 40
3.1.1 故事劇情—找房子問中介 40
3.1.2 用程序來模擬生活 41
3.2 從劇情中思考中介模式 46
3.2.1 什么是中介模式 46
3.2.2 中介模式設計思想 46
3.3 中介模式的模型抽象 48
3.3.1 代碼框架 48
3.3.2 類圖 49
3.3.3 模型說明 50
3.4 實戰應用 51
3.5 應用場景 56
第4章 裝飾模式 57
4.1 從生活中領悟裝飾模式 57
4.1.1 故事劇情—你想怎么搭就怎么搭 57
4.1.2 用程序來模擬生活 58
4.2 從劇情中思考裝飾模式 62
4.2.1 什么是裝飾模式 62
4.2.2 裝飾模式設計思想 63
4.3 裝飾模式的模型抽象 64
4.3.1 類圖 64
4.3.2 Python中的裝飾器 64
4.3.3 模型說明 69
4.4 應用場景 70
第5章 單例模式 71
5.1 從生活中領悟單例模式 71
5.1.1 故事劇情—你是我的唯一 71
5.1.2 用程序來模擬生活 72
5.2 從劇情中思考單例模式 73
5.2.1 什么是單例模式 73
5.2.2 單例模式設計思想 73
5.3 單例模式的模型抽象 73
5.3.1 代碼框架 73
5.3.2 類圖 78
5.3.3 基于框架的實現 78
5.4 應用場景 79
第6章 克隆模式 80
6.1 從生活中領悟克隆模式 80
6.1.1 故事劇情—給你一個分身術 80
6.1.2 用程序來模擬生活 80
6.2 從劇情中思考克隆模式 82
6.2.1 什么是克隆模式 82
6.2.2 淺拷貝與深拷貝 82
6.3 克隆模式的模型抽象 86
6.3.1 代碼框架 86
6.3.2 類圖 86
6.3.3 基于框架的實現 87
6.3.4 模型說明 87
6.4 實戰應用 88
6.5 應用場景 90
第7章 職責模式 91
7.1 從生活中領悟職責模式 91
7.1.1 故事劇情—我的假條去哪兒了 91
7.1.2 用程序來模擬生活 92
7.2 從劇情中思考職責模式 96
7.2.1 什么是職責模式 96
7.2.2 職責模式設計思想 96
7.3 職責模式的模型抽象 97
7.3.1 代碼框架 97
7.3.2 類圖 98
7.3.3 基于框架的實現 99
7.3.4 模型說明 102
7.4 應用場景 103
第8章 代理模式 104
8.1 從生活中領悟代理模式 104
8.1.1 故事劇情—幫我拿一下快遞 104
8.1.2 用程序來模擬生活 105
8.2 從劇情中思考代理模式 107
8.2.1 什么是代理模式 107
8.2.2 代理模式設計思想 107
8.3 代理模式的模型抽象 107
8.3.1 代碼框架 107
8.3.2 類圖 109
8.3.3 基于框架的實現 110
8.3.4 模型說明 111
8.4 應用場景 111
第9章 外觀模式 113
9.1 從生活中領悟外觀模式 113
9.1.1 故事劇情—學妹別慌,學長幫你 113
9.1.2 用程序來模擬生活 114
9.2 從劇情中思考外觀模式 116
9.2.1 什么是外觀模式 116
9.2.2 外觀模式設計思想 116
9.3 外觀模式的模型抽象 117
9.3.1 類圖 117
9.3.2 軟件的分層結構 117
9.3.3 模型說明 119
9.4 實戰應用 119
9.5 應用場景 123
第10章 迭代模式 124
10.1 從生活中領悟迭代模式 124
10.1.1 故事劇情—下一個就是你了 124
10.1.2 用程序來模擬生活 125
10.2 從劇情中思考迭代模式 128
10.2.1 什么是迭代模式 128
10.2.2 迭代模式設計思想 129
10.3 迭代模式的模型抽象 130
10.3.1 代碼框架 130
10.3.2 Python中的迭代器 132
10.3.3 類圖 136
10.3.4 模型說明 137
10.4 應用場景 138
第11章 組合模式 139
11.1 從生活中領悟組合模式 139
11.1.1 故事劇情—自己組裝電腦,價格再降三成 139
11.1.2 用程序來模擬生活 140
11.2 從劇情中思考組合模式 146
11.2.1 什么是組合模式 146
11.2.2 組合模式設計思想 147
11.3 組合模式的模型抽象 148
11.3.1 代碼框架 148
11.3.2 類圖 149
11.3.3 模型說明 150
11.4 實戰應用 150
11.5 應用場景 153
第12章 構建模式 154
12.1 從生活中領悟構建模式 154
12.1.1 故事劇情—你想要一輛車還是一個莊園 154
12.1.2 用程序來模擬生活 155
12.2 從劇情中思考構建模式 157
12.2.1 什么是構建模式 157
12.2.2 構建模式設計思想 157
12.2.3 與工廠模式的區別 158
12.2.4 與組合模式的區別 158
12.3 構建模式的模型抽象 159
12.3.1 類圖 159
12.3.2 基于框架的實現 160
12.3.3 模型說明 163
12.4 應用場景 164
第13章 適配模式 166
13.1 從生活中領悟適配模式 166
13.1.1 故事劇情——有個轉換器就好了 166
13.1.2 用程序來模擬生活 167
13.2 從劇情中思考適配模式 170
13.2.1 什么是適配模式 170
13.2.2 適配模式設計思想 170
13.3 適配模式的模型抽象 172
13.3.1 代碼框架 172
13.3.2 類圖 172
13.3.3 模型說明 173
13.4 實戰應用 174
13.5 應用場景 184
第14章 策略模式 185
14.1 從生活中領悟策略模式 185
14.1.1 故事劇情—怎么來不重要,人到就行 185
14.1.2 用程序來模擬生活 186
14.2 從劇情中思考策略模式 188
14.2.1 什么是策略模式 188
14.2.2 策略模式設計思想 188
14.3 策略模式的模型抽象 189
14.3.1 類圖 189
14.3.2 模型說明 190
14.4 實戰應用 190
14.5 應用場景 195
第15章 工廠模式 196
15.1 從生活中領悟工廠模式 196
15.1.1 故事劇情—你要拿鐵還是摩卡呢 196
15.1.2 用程序來模擬生活 197
15.2 從劇情中思考工廠模式 199
15.2.1 什么是簡單工廠模式 199
15.2.2 工廠模式設計思想 199
15.3 工廠三姐妹 199
15.3.1 簡單工廠模式 200
15.3.2 工廠方法模式 201
15.3.3 抽象工廠模式 203
15.4 進一步思考 205
15.5 實戰應用 205
第16章 命令模式 209
16.1 從生活中領悟命令模式 209
16.1.1 故事劇情—大閘蟹,走起 209
16.1.2 用程序來模擬生活 210
16.2 從劇情中思考命令模式 213
16.2.1 什么是命令模式 213
16.2.2 命令模式設計思想 213
16.3 命令模式的模型抽象 214
16.3.1 代碼框架 214
16.3.2 類圖 215
16.3.3 模型說明 216
16.4 實戰應用 216
16.5 應用場景 224
第17章 備忘模式 225
17.1 從生活中領悟備忘模式 225
17.1.1 故事劇情—好記性不如爛筆頭 225
17.1.2 用程序來模擬生活 226
17.2 從劇情中思考備忘模式 228
17.2.1 什么是備忘模式 228
17.2.2 備忘模式設計思想 229
17.3 備忘模式的模型抽象 229
17.3.1 類圖 229
17.3.2 代碼框架 230
17.3.3 模型說明 232
17.4 實戰應用 232
17.5 應用場景 235
第18章 享元模式 236
18.1 從生活中領悟享元模式 236
18.1.1 故事劇情—顏料很貴,必須充分利用 236
18.1.2 用程序來模擬生活 237
18.2 從劇情中思考享元模式 239
18.2.1 什么是享元模式 239
18.2.2 享元模式設計思想 239
18.3 享元模式的模型抽象 239
18.3.1 類圖 239
18.3.2 基于框架的實現 240
18.3.3 模型說明 242
18.4 應用場景 243
第19章 訪問模式 244
19.1 從生活中領悟訪問模式 244
19.1.1 故事劇情—一千個讀者一千個哈姆雷特 244
19.1.2 用程序來模擬生活 245
19.2 從劇情中思考訪問模式 246
19.2.1 什么是訪問模式 246
19.2.2 訪問模式設計思想 247
19.3 訪問模式的模型抽象 247
19.3.1 代碼框架 247
19.3.2 類圖 248
19.3.3 基于框架的實現 249
19.3.4 模型說明 250
19.4 實戰應用 251
19.5 應用場景 255
第20章 其他經典設計模式 256
20.1 模板模式 256
20.1.1 模式定義 256
20.1.2 類圖結構 257
20.1.3 代碼框架 257
20.1.4 應用案例 259
20.1.5 應用場景 261
20.2 橋接模式 261
20.2.1 模式定義 261
20.2.2 類圖結構 261
20.2.3 應用案例 262
20.2.4 應用場景 266
20.3 解釋模式 266
20.3.1 模式定義 266
20.3.2 類圖結構 266
20.3.3 應用案例 267
20.3.4 應用場景 271

進 階 篇
第21章 深入解讀過濾器模式 274
21.1 從生活中領悟過濾器模式 274
21.1.1 故事劇情—制作一杯鮮純細膩的豆漿 274
21.1.2 用程序來模擬生活 275
21.2 從劇情中思考過濾器模式 275
21.2.1 過濾器模式 276
21.2.2 與職責模式的聯系 276
21.3 過濾器模式的模型抽象 276
21.3.1 代碼框架 277
21.3.2 類圖 278
21.3.3 基于框架的實現 278
21.3.4 模型說明 279
21.4 實戰應用 280
21.5 應用場景 282
第22章 深入解讀對象池技術 283
22.1 從生活中領悟對象池技術 283
22.1.1 故事劇情—共享讓出行更便捷 283
22.1.2 用程序來模擬生活 284
22.2 從劇情中思考對象池機制 287
22.2.1 什么是對象池 287
22.2.2 與享元模式的聯系 287
22.3 對象池機制的模型抽象 288
22.3.1 代碼框架 288
22.3.2 類圖 291
22.3.3 基于框架的實現 292
22.3.4 模型說明 294
22.4 應用場景 295
第23章 深入解讀回調機制 296
23.1 從生活中領悟回調機制 296
23.1.1 故事劇情—把你的技能亮出來 296
23.1.2 用程序來模擬生活 296
23.2 從劇情中思考回調機制 298
23.2.1 回調機制 298
23.2.2 設計思想 299
23.3 回調機制的模型抽象 299
23.3.1 面向過程的實現方式 299
23.3.2 面向對象的實現方式 300
23.3.3 模型說明 301
23.4 實戰應用 302
23.4.1 基于回調函數的實現 302
23.4.2 基于策略模式的實現 303
23.4.3 回調在異步中的應用 307
23.5 應用場景 310
第24章 深入解讀MVC模式 311
24.1 從生活中領悟MVC模式 311
24.1.1 故事劇情—定格最美的一瞬間 311
24.1.2 用程序來模擬生活 312
24.2 從劇情中思考MVC模式 316
24.2.1 MVC模式 317
24.2.2 與中介模式的聯系 317
24.2.3 與外觀模式的聯系 317
24.3 MVC模式的模型抽象 318
24.3.1 MVC 318
24.3.2 MVP 318
24.3.3 MVVM 319
24.3.4 模型說明 320
24.4 應用場景 320

經 驗 篇
第25章 關于設計模式的理解 324
25.1 眾多書籍之下為何還要寫此書 324
25.2 設計模式玄嗎 324
25.3 如何區分不同的模式 325
25.4 編程思想的三重境界 325
第26章 關于設計原則的思考 327
26.1 SOLID原則 327
26.1.1 單一職責原則 327
26.1.2 開放封閉原則 331
26.1.3 里氏替換原則 334
26.1.4 依賴倒置原則 337
26.1.5 接口隔離原則 341
26.2 是否一定要遵循這些設計原則 348
26.2.1 軟件設計是一個逐步優化的過程 348
26.2.2 不是一定要遵循這些設計原則 349
26.3 更為實用的設計原則 349
26.3.1 LoD原則(Law of Demeter) 349
26.3.2 KISS原則(Keep It Simple and Stupid) 350
26.3.3 DRY原則(Don’t Repeat Yourself) 351
26.3.4 YAGNI原則(You Aren't Gonna Need It) 353
26.3.5 Rule Of Three原則 353
26.3.6 CQS原則(Command-Query Separation) 354
第27章 關于項目重構的思考 355
27.1 什么叫重構 355
27.2 為何要重構 355
27.3 什么時機進行重構 356
27.4 如何重構代碼 357
27.4.1 重命名 357
27.4.2 函數重構 358
27.4.3 重新組織數據 359
27.4.4 用設計模式改善代碼設計 360
27.5 代碼整潔之道 360
27.5.1 命名的學問 360
27.5.2 整潔代碼的案例 362
附錄A 23種經典設計模式的索引對照表 368
附錄B Python中__new__、__init__和__call__的用法 370
附錄C Python中metaclass的原理 377

讀者評論

推薦用戶

百人牛牛棋牌 113213501948357542727728900323929168195683803108228138232418524180669011452438283299260986713243299 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();