本書以作者與虛擬女友(小璐)在生活中遇到的各種問題作為主線,引出設(shè)計模式的各種功能、用途,以及解決方法,系統(tǒng)介紹了23種設(shè)計模式,根據(jù)具體的實例形象化、具體化地進行了代碼的編寫和詳細講解,讓那些本來對設(shè)計模式不太了解、一知半解、只有概念的讀者,徹底了解和掌握常用的設(shè)計模式使用場景及使用方式,并掌握每個設(shè)計模式的UML結(jié)構(gòu)和描繪方式。本書共23章,包括認識設(shè)計模式、單例模式、工廠模式、建造者模式、原型模式、適配器模式、裝飾器模式、外觀模式、橋接模式、組合模式、享元模式、代理模式、策略模式、命令模式、狀態(tài)模式、模板方法模式、備忘錄模式、中介者模式、觀察者模式、迭代器模式、責(zé)任鏈模式、訪問者模式、解釋器模式。通過以上的知識,讓你從模式小白直接升級為模式大神!本書所需源代碼,均可通過本書配套下載鏈接獲得。
本書適合編程初學(xué)者或希望在面向?qū)ο缶幊躺嫌兴岣叩拈_發(fā)人員閱讀。
23種設(shè)計模式
掌握每個設(shè)計模式的UML結(jié)構(gòu)和描繪方式
從愛情生活中理解設(shè)計模式之美
設(shè)計模式包含了大量的編程思想,真正掌握并不容易。市面上關(guān)于設(shè)計模式的書籍并不少,但大多講解得比較晦澀,沒有真實的應(yīng)用場景和框架源碼支撐,學(xué)習(xí)后,只知其形,不知其神,就會造成這樣的結(jié)果: 知道各種設(shè)計模式,但是不知道怎樣應(yīng)用到真實項目中。本書針對上述問題,有針對性地進行了升級,以有趣的故事為背景,采用框架源碼分析的方式,讓文章內(nèi)容生動有趣好理解。
本書主要內(nèi)容。
本書通過有趣的案例場景以及設(shè)計模式在Spring框架、JDK中的應(yīng)用講解設(shè)計模式,幫助開發(fā)人員能夠更好更快地理解和應(yīng)用設(shè)計模式。
本書共23章,主要內(nèi)容如下:
第1章,介紹設(shè)計模式的分類、六大原則,以及23種設(shè)計模式的總體情況,讓讀者在學(xué)習(xí)之前,對設(shè)計模式有整體的認識。
第2~23章,通過有趣的場景案例講解設(shè)計模式的概念、使用場景以及使用方法。
本書特點。
以淺顯有趣的案例,說明設(shè)計模式的概念和應(yīng)用。
以簡單直觀的UML類圖方式說明設(shè)計模式中各種角色的關(guān)系。
豐富有趣的故事穿插全文,寓教于樂,讓學(xué)習(xí)不再枯燥。
采用由淺入深,層層深入,步步推進的講解方式,讓復(fù)雜的設(shè)計模式變得簡單易懂。
如何閱讀本書。
這是一本偏向動手實戰(zhàn)的技術(shù)圖書,主要介紹設(shè)計模式解決方案的具體落地方法。本書的每一章都會重點介紹與該章主題相關(guān)的設(shè)計模式,可以從第1章開始閱讀,也可以根據(jù)需要從任意一章進行閱讀。在閱讀的過程中,讀者不僅要仔細閱讀每一章的文字,以及案例場景設(shè)計,同時更要多閱讀代碼,或者自己動手編寫代碼。
深入理解設(shè)計模式學(xué)習(xí)收獲
理解設(shè)計模式的意義和實現(xiàn)。
寫出優(yōu)雅的代碼,輕松且無障礙。
提升程序員在項目開發(fā)過程中發(fā)現(xiàn)問題和解決問題的能力。
讓代碼可重用、可讀、可靠、可維護、可擴展。
由于作者水平有限,書中不足之處在所難免,誠摯期盼專家和讀者給予批評和指正。
林祥纖
阿里巴巴前高級研發(fā)工程師,51CTO特約合作講師,擅長社交、電商、Spring Boot、分布式架構(gòu)、微服務(wù)架構(gòu)等領(lǐng)域軟件系統(tǒng)的架構(gòu)設(shè)計、系統(tǒng)分析及性能優(yōu)化等。
前言
認識設(shè)計模式/
1.1軟件設(shè)計模式概述/
1.1.1什么是軟件設(shè)計模式/
1.1.2為何學(xué)習(xí)設(shè)計模式/
1.2GoF的23種設(shè)計模式的分類和功能/
1.2.1設(shè)計模式的分類/
1.2.2設(shè)計模式的功能/
1.3設(shè)計模式的六大原則/
1.3.1六大原則/
1.3.2一句話概括設(shè)計模式六大原則/
創(chuàng)建型模式之單例模式/
2.1單例模式的基本概念/
2.1.1什么是單例模式/
2.1.2單例模式的優(yōu)缺點/
2.1.3單例模式的使用場景/
2.1.4單例模式的類圖/
2.1.5單例模式的實現(xiàn)方式/
2.2單例模式的實現(xiàn):懶漢模式/
2.2.1準(zhǔn)備工作:構(gòu)建一個女朋友/
2.2.2懶漢模式:你是我的唯一/
2.2.3線程安全問題:出現(xiàn)了兩個小璐/
2.2.4指令重排/
2.2.5懶漢模式小結(jié)/
2.3單例模式的實現(xiàn):餓漢模式/
2.3.1餓漢模式/
2.3.2餓漢模式小結(jié)/
2.4單例模式的實現(xiàn):靜態(tài)內(nèi)部類/
2.4.1靜態(tài)內(nèi)部類/
2.4.2靜態(tài)內(nèi)部類小結(jié)/
2.5單例模式的實現(xiàn):枚舉類型/
2.5.1枚舉類型/
2.5.2枚舉類型小結(jié)/
2.6單例模式在Spring框架和JDK源碼中的
應(yīng)用/
2.6.1在JDK源碼中的應(yīng)用/
2.6.2在Spring源碼中的應(yīng)用/
2.7單例模式實戰(zhàn):線程池/
2.7.1普通方式實現(xiàn)/
2.7.2單例模式實現(xiàn)/
深入理解設(shè)計模式創(chuàng)建型模式之工廠模式/
3.1工廠模式/
3.1.1工廠模式概念/
3.1.2簡單理解工廠模式/
3.2無工廠時代/
3.2.1無工廠時代類圖:汽車圖紙/
3.2.2無工廠時代編碼:制造汽車/
3.3工廠模式之簡單工廠模式/
3.3.1簡單工廠模式的誕生/
3.3.2簡單工廠模式構(gòu)建汽車/
3.3.3簡單工廠模式小結(jié)/
3.4工廠模式之工廠方法模式/
3.4.1工廠方法模式/
3.4.2工廠方法模式實現(xiàn)汽車的構(gòu)建/
3.4.3簡單工廠擴展特性說明/
3.5工廠模式之抽象工廠模式/
3.5.1抽象工廠模式/
3.5.2抽象工廠模式實現(xiàn)汽車的構(gòu)建/
3.6工廠模式在Spring框架和JDK源碼中的
應(yīng)用/
3.6.1Spring中的工廠模式/
3.6.2JDK中的工廠模式/
3.7工廠模式實戰(zhàn)之不同的支付渠道/
3.8工廠模式總結(jié)/
3.8.1工廠模式特點/
3.8.2工廠模式區(qū)別/
3.8.3工廠模式適用場景/
目錄
建造者模式/
4.1建造者模式概念/
4.1.1什么是建造者模式/
4.1.2建造者模式的結(jié)構(gòu)和類圖/
4.1.3建造者模式的優(yōu)缺點/
4.2建造者模式之組裝計算機/
4.2.1無建造者模式/
4.2.2建造者模式/
4.3建造者模式在Spring框架和JDK源碼中
的應(yīng)用/
4.3.1JDK中的建造者模式/
4.3.2Spring中的建造者模式/
創(chuàng)建型模式之原型模式/
5.1原型模式概念/
5.1.1原型模式定義及優(yōu)勢/
5.1.2原型模式主要角色和類圖/
5.1.3原型模式適用場景及在Java中的
實現(xiàn)/
5.2原型模式之復(fù)印簡歷/
結(jié)構(gòu)型模式之適配器模式/
6.1適配器模式概念/
6.1.1適配器模式基本概念/
6.1.2適配器模式適用場景和分類/
6.2適配器模式之類適配器/
6.2.1類適配器基本概念/
6.2.2電壓轉(zhuǎn)換例子說明/
6.2.3電壓轉(zhuǎn)換/
6.3適配器模式之對象適配器/
6.3.1對象適配器模式基本概念/
6.3.2電壓轉(zhuǎn)換例子說明/
6.3.3電壓轉(zhuǎn)換/
6.4適配器模式之缺省適配器/
6.4.1缺省適配器模式基本概念/
6.4.2電壓轉(zhuǎn)換例子說明/
6.4.3電壓轉(zhuǎn)換/
6.4.4電壓轉(zhuǎn)換在jdk1.8 的實現(xiàn)/
6.5適配器模式在Spring框架中的
應(yīng)用/
6.5.1在Spring中的應(yīng)用/
6.5.2導(dǎo)出數(shù)據(jù)類型/
結(jié)構(gòu)型模式之裝飾器模式/
7.1裝飾器模式概念/
7.2照相機美顏濾鏡/
7.2.1照相機類圖/
7.2.2照相機編碼/
7.2.3裝飾器模式小結(jié)/
7.3裝飾器模式在Spring框架和JDK源碼中
的應(yīng)用/
7.3.1在Spring中的應(yīng)用/
7.3.2在JDK中的應(yīng)用/
結(jié)構(gòu)型模式之外觀(門面)模式/
8.1外觀模式概念/
8.2外觀模式之一鍵開關(guān)/
8.2.1一鍵開關(guān)類圖/
8.2.2一鍵開關(guān)編碼/
8.2.3外觀模式的優(yōu)缺點/
8.2.4外觀模式與適配器模式的區(qū)別/
8.3外觀模式在Spring框架和SLF4J中的
應(yīng)用/
8.3.1在Spring中的應(yīng)用/
8.3.2在SLF4J中的應(yīng)用/
結(jié)構(gòu)型模式之橋接模式/
9.1橋接模式之消息發(fā)送/
9.1.1消息發(fā)送場景問題/
9.1.2消息發(fā)送1.0之只有消息發(fā)送方式/
9.1.3消息發(fā)送2.0之加入消息類型/
9.1.4消息發(fā)送3.0二位擴展問題分析/
9.2橋接模式基本概念/
9.3橋接模式之消息發(fā)送/
9.4橋接模式總結(jié)以及應(yīng)用場景/
9.4.1橋接模式總結(jié)/
9.4.2橋接模式的應(yīng)用場景/
9.5橋接模式在JDK源碼中的應(yīng)用/
結(jié)構(gòu)型模式之組合模式/
10.1組合模式基本概念/
10.2組合模式之公司部門管理/
10.2.1公司管理分析/
10.2.2公司管理編碼/
10.3組合模式在Spring框架和JDK中的
應(yīng)用/
10.3.1在Spring中的應(yīng)用/
10.3.2在JDK中的應(yīng)用/
結(jié)構(gòu)型模式之享元模式/
11.1享元模式/
11.1.1享元模式(Flyweight)基本
概念/
11.1.2享元模式之共享東西/
11.2享元模式在框架中的應(yīng)用/
結(jié)構(gòu)型模式之代理模式/
12.1代理模式概念/
12.2代理模式之靜態(tài)代理/
12.2.1靜態(tài)代理用戶服務(wù)的實現(xiàn)/
12.2.2靜態(tài)代理方法耗時統(tǒng)計/
12.3代理模式之動態(tài)代理/
12.3.1JDK動態(tài)代理類/
12.3.2使用JDK動態(tài)代理類方法耗時
統(tǒng)計/
12.3.3在Spring框架的說明/
行為型模式之策略模式/
13.1策略模式概念/
13.2策略模式之出行旅游/
13.3策略模式之錦囊妙計/
行為型模式之命令模式/
14.1命令模式之燒烤