出版時間:2013-1 出版社:清華大學(xué)出版社 作者:劉偉 頁數(shù):396 字數(shù):619000
Tag標(biāo)簽:無
前言
在過去多年的軟件開發(fā)和教學(xué)推廣工作中,我時常能夠聽到這樣的聲音:抽象類和接口到底有什么用?繼承不好嗎?為什么有時候不用它來實現(xiàn)功能復(fù)用?能不能在下次增加功能的時候不要修改源代碼?每次都改,太麻煩了。有沒有一種方法能夠減少類的個數(shù)?這么多類,太復(fù)雜了。面向?qū)ο筌浖目芍赜眯圆皇呛芎脝??為什么我還是在不斷編寫相同的代碼?我學(xué)過設(shè)計模式,也看了好幾本書,但實際開發(fā)時我還是不知道怎么運用這些模式?……你是否也曾有過上述疑問或者類似的感慨?如果有的話,那么本書將是你明智的選擇。本書將結(jié)合大量項目實例來逐個講解設(shè)計模式,講述如何通過設(shè)計模式來解決上述問題,讓讀者能夠快速提升自己的開發(fā)功力,真正理解和掌握每一個設(shè)計模式,在軟件開發(fā)的內(nèi)功修煉之道上邁出堅實的一步。寫作目的設(shè)計面向?qū)ο筌浖容^困難,而設(shè)計可復(fù)用的面向?qū)ο筌浖透永щy?!狦oF(1995)軟件開發(fā)是一門技術(shù),更是一門藝術(shù)!隨著面向?qū)ο蠹夹g(shù)的發(fā)展和廣泛應(yīng)用,設(shè)計模式在軟件開發(fā)和設(shè)計中的重要性不言而喻。作為軟件開發(fā)人員,尤其是面向?qū)ο筌浖_發(fā)人員,設(shè)計模式已成為其內(nèi)功修煉的重要組成部分之一。無論是面向?qū)ο蟮某鯇W(xué)者還是具有一定經(jīng)驗的開發(fā)人員,都可以通過對設(shè)計模式的學(xué)習(xí)和使用來加深對面向?qū)ο笏枷氲睦斫?,從而開發(fā)出具有更好的可擴展性和復(fù)用性的軟件。設(shè)計模式是前人經(jīng)驗的積累,它將讓軟件變得更像一個藝術(shù)品,而不是一堆難以維護和重用的代碼。作為一名從事模式使用和推廣工作多年的教師兼開發(fā)人員,如何更好地將設(shè)計模式的思想和實踐經(jīng)驗傳遞給他人是我一直思考的一個問題,于是我開始著手收集和整理這些年積累的一些與設(shè)計模式相關(guān)的項目實例和資源,經(jīng)過無數(shù)個晚上的“挑燈夜戰(zhàn)”,終于完成了本書的編寫工作,借此為面向?qū)ο蠹夹g(shù)的推廣盡一點綿薄之力。本書結(jié)構(gòu)及內(nèi)容本書分為4個部分,共26章。第1部分:基礎(chǔ)知識,包含第1章和第2章,主要介紹與設(shè)計模式相關(guān)的基礎(chǔ)知識,包括設(shè)計模式概述、UML類圖、7個面向?qū)ο笤O(shè)計原則等內(nèi)容,為后續(xù)設(shè)計模式的學(xué)習(xí)奠定基礎(chǔ)。第2部分:創(chuàng)建的藝術(shù),包含第3-8章,介紹6種常用的創(chuàng)建型設(shè)計模式,分別是單例模式、簡單工廠模式、工廠方法模式、抽象工廠模式、原型模式和建造者模式。第3部分:組合的藝術(shù),包含第9-15章,介紹7種常用的結(jié)構(gòu)型設(shè)計模式,分別是適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式和代理模式。第4部分:交互的藝術(shù),包含第16-26章,介紹11種常用的行為型設(shè)計模式,分別是職責(zé)鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態(tài)模式、策略模式、模板方法模式和訪問者模式。本書將結(jié)合大量應(yīng)用實例來分析和講解每一個設(shè)計模式,力求通過最通俗易懂的方式來讓讀者學(xué)習(xí)和理解設(shè)計模式,并在真實項目實例的引導(dǎo)下學(xué)會合理選擇和運用設(shè)計模式。每章的基本結(jié)構(gòu)如下圖所示。每章的基本內(nèi)容如下。第1章:介紹設(shè)計模式的基本概念;第2章:介紹UML類圖與面向?qū)ο笤O(shè)計原則;第3章:介紹如何確保系統(tǒng)中一個類只能有一個實例;第4章:介紹如何將對象的創(chuàng)建和對象的使用分離;第5章:介紹如何通過不同的工廠來創(chuàng)建不同類型的對象;第6章:介紹如何設(shè)計一個能夠創(chuàng)建一系列產(chǎn)品對象的工廠;第7章:介紹如何通過克隆來得到一個一模一樣的對象;第8章:介紹如何一步步創(chuàng)建一個包含多個組成部分的復(fù)雜對象;第9章:介紹如何在不修改現(xiàn)有系統(tǒng)的前提下重用沒有源碼的第三方類庫;第10章:介紹如何避免在多層繼承結(jié)構(gòu)中類的個數(shù)出現(xiàn)爆炸式增長;第11章:介紹如何使用面向?qū)ο蟮姆绞絹硖幚碥浖到y(tǒng)中的樹狀結(jié)構(gòu);第12章:介紹如何不通過繼承的方式來擴展類的功能;第13章:介紹如何為復(fù)雜子系統(tǒng)提供一個統(tǒng)一的入口;第14章:介紹如何實現(xiàn)對象的多次復(fù)用以節(jié)省系統(tǒng)資源;第15章:介紹如何提供一種間接訪問機制來實現(xiàn)對象的遠程訪問或受限訪問;第16章:介紹如何讓多個對象都有機會來處理同一個請求;第17章:介紹如何將請求的發(fā)送者和請求接收者完全解耦;第18章:介紹如何自定義一個簡單的語言;第19章:介紹如何間接遍歷一個聚合對象中的元素;第20章:介紹如何協(xié)調(diào)多個對象之間復(fù)雜的相互調(diào)用;第21章:介紹如何在軟件中實現(xiàn)撤銷功能;第22章:介紹如何實現(xiàn)對象之間一對多的聯(lián)動;第23章:介紹如何設(shè)計和實現(xiàn)一個具有多個狀態(tài)的對象;第24章:介紹如何在不修改現(xiàn)有代碼的前提下更換一種算法;第25章:介紹如何為一個復(fù)雜算法的某些步驟提供多種實現(xiàn)方式;第26章:介紹如何操作一個包含多種類型對象的復(fù)雜結(jié)構(gòu)。本書特點本書不是教材,但有教材的嚴謹性;本書不是科普書,但有科普書的通俗性;本書沒有故事情節(jié),卻也不失趣味性。本書主要特點如下:(1)提供大量真實項目實例,針對每一個設(shè)計模式至少提供了一個完整的實例,是一本基于實例驅(qū)動的設(shè)計模式實踐指南,結(jié)合實例來學(xué)習(xí)設(shè)計模式,可以讓讀者學(xué)會在實際開發(fā)中運用設(shè)計模式,具體實例列表參見之后的“實例目錄”。(2)內(nèi)嵌了適量的思考題和練習(xí)題,所有練習(xí)題也都基于某個項目實例,讓讀者能夠在學(xué)習(xí)的同時通過思考題和練習(xí)題來理解和進一步鞏固所學(xué)知識。(3)提供相應(yīng)的技術(shù)博客支持,為廣大讀者提供一個靈活的溝通和交流平臺。(4)內(nèi)容全面,語言通俗,講解深入,難度適中,可滿足不同層次讀者的需求,每一個實例都提供了完整的可執(zhí)行代碼和結(jié)構(gòu)圖,所有結(jié)構(gòu)圖(類圖)均嚴格按照UML 2.0標(biāo)準(zhǔn)繪制,代碼均在JDK 1.7環(huán)境下通過測試且運行無誤。目標(biāo)讀者如果你是一位有一定開發(fā)經(jīng)驗的一線軟件開發(fā)人員,你想提升自己的軟件設(shè)計與開發(fā)功力,希望設(shè)計并開發(fā)出可復(fù)用性和可維護性俱佳的面向?qū)ο筌浖?,那么本書為你而寫;如果你是一位計算機或軟件相關(guān)專業(yè)的教育工作者,你想在教授設(shè)計或編程類課程的同時讓學(xué)生掌握一些面向?qū)ο笤O(shè)計技巧并將其應(yīng)用于項目實踐,那么本書為你而寫;如果你是一名剛接觸面向?qū)ο缶幊痰某鯇W(xué)者,你想更好地理解面向?qū)ο笏枷氩⒕帉懗龈哔|(zhì)量的程序代碼,那么本書為你而寫;如果你是一位軟件工程或者軟件架構(gòu)設(shè)計研究人員,你正從事或者準(zhǔn)備從事面向?qū)ο筌浖O(shè)計等相關(guān)研究工作,那么本書也為你而寫。無論你使用的編程語言是C++、Java、C#、VB.NET、ObjectiveC,還是JavaScript、PHP、Delphi、Python等,我相信本書都會有你想要的內(nèi)容。本書適用于:從未接觸過設(shè)計模式,想用較短的時間來熟悉并掌握設(shè)計模式的讀者;學(xué)習(xí)過設(shè)計模式,有一定基礎(chǔ),但不知道如何在實際開發(fā)中運用設(shè)計模式的讀者;使用過設(shè)計模式,想對GoF設(shè)計模式有一個更加全面的學(xué)習(xí)的讀者;……總之,本書可作為一線軟件開發(fā)人員、高等院校計算機及軟件等相關(guān)專業(yè)師生、IT培訓(xùn)機構(gòu)講師和學(xué)員、業(yè)余軟件開發(fā)人員及設(shè)計模式研究人員和愛好者的技術(shù)類參考用書和自學(xué)讀物。感謝感謝我的師長,沒有你們多年的悉心教誨與耐心指導(dǎo),就沒有現(xiàn)在的我。感謝我的家人,謝謝你們一直在我背后的默默支持與真情付出。感謝胡志剛、王斌、郭克華、張友生、費洪曉、任勝兵、譚長庚、江林、徐再德、張佳寧、閻朝坤、張楚才、楊柳、宋鐵、鄭美光、任波、周建軍、曾文兵、陳昌主等同事與好友在我寫作過程中給予的寶貴意見和建議,正因為有你們,我的奮斗之路才會如此豐富多彩!感謝黃瑞、屈光輝、胡坤、呂豐、梁佳賓、游永彬、劉宏韜、黃宇健、朱禮禮、李輝、唐磊、馬元文等學(xué)生參與本書初稿的校對工作,并發(fā)現(xiàn)書中的一些文字紕漏和錯誤,從學(xué)習(xí)者的角度提出一些建議,以助于本書的充實和完善。感謝我的CSDN技術(shù)博客中那些認識的、不認識的網(wǎng)友們對我工作的肯定,謝謝你們的支持與鼓勵。感謝所有幫助和支持過我的朋友,特別是那些聽過我課的學(xué)生和企業(yè)學(xué)員。同時,在本書的編寫過程中我參考和引用了國內(nèi)外很多書籍和網(wǎng)站的相關(guān)內(nèi)容,個別實例的初始原型也來源于網(wǎng)絡(luò),由于涉及的網(wǎng)站和網(wǎng)頁太多,無法一一列舉,在此一并予以感謝。感謝武俠巨匠金庸老先生,那些武俠小說給予我太多寫作靈感,同時書中不少實例中的人名也源于小說中那些經(jīng)典的武俠人物。最后特別感謝清華大學(xué)出版社為本書出版所付出的努力,你們的專業(yè)和嚴格的工作作風(fēng)讓我在寫作過程中充滿了激情與動力,因為我們的目標(biāo)一致:為讀者送上最好的圖書!由于時間倉促、學(xué)識有限,雖經(jīng)多次審閱與校稿,但書中不足和疏漏之處難免,懇請廣大讀者將意見和建議通過清華大學(xué)出版社反饋給我,力求精益求精,更趨完美。劉偉2012年7月
內(nèi)容概要
軟件開發(fā)是一門技術(shù),更是一門藝術(shù)。設(shè)計模式是面向?qū)ο筌浖_發(fā)的入門功夫,是前人經(jīng)驗的積累,它為構(gòu)建可維護性和可復(fù)用性俱佳的軟件而誕生?!对O(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》結(jié)合大量應(yīng)用實例分析和講解每一個設(shè)計模式,力求通過最通俗易懂的方式讓讀者學(xué)習(xí)和理解設(shè)計模式,并且在真實項目實例的引導(dǎo)下學(xué)會選擇和合理運用設(shè)計模式。
《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》分為4個部分,共26章內(nèi)容:第1部分(第1章、第2章)為基礎(chǔ)知識,包括設(shè)計模式概述、UMI,類圖與面向?qū)ο笤O(shè)計原則等;第2部分(第3~8章)為創(chuàng)建的藝術(shù),包括6種常用的創(chuàng)建型設(shè)計模式;第3部分(第9~15章)為組合的藝術(shù),包括7種常用的結(jié)構(gòu)型設(shè)計模式;第4部分(第16~26章)為交互的藝術(shù),包括11種常用的行為型設(shè)計模式。
《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》可作為一線軟件開發(fā)人員、高等院校計算機及軟件等相關(guān)專業(yè)師生、IT培訓(xùn)機構(gòu)講師和學(xué)員、業(yè)余軟件開發(fā)人員、設(shè)計模式研究人員以及愛好者的參考用書和自學(xué)讀物。
作者簡介
劉偉,中南大學(xué)計算機應(yīng)用技術(shù)博士,高級工程師,國家認證系統(tǒng)分析師,首批國家認證系統(tǒng)架構(gòu)設(shè)計師,數(shù)據(jù)庫系統(tǒng)工程師,微軟認證系統(tǒng)工程師,CSAI顧問團專業(yè)顧問及企業(yè)內(nèi)訓(xùn)講師,CSDN認證專家。具有十余年軟件開發(fā)、項目管理及教育培訓(xùn)經(jīng)驗,曾在NIIT(印度國家信息技術(shù)學(xué)院)擔(dān)任高級講師,主持和參與三十多個軟件項目的開發(fā)工作,現(xiàn)主要致力于軟件工程、數(shù)據(jù)挖掘等領(lǐng)域的教學(xué)、推廣和研究工作。發(fā)表相關(guān)論文多篇,已編寫出版《設(shè)計模式》、《設(shè)計模式實訓(xùn)教程》、《設(shè)計模式的藝術(shù)——軟件開發(fā)人員內(nèi)功修煉之道》等著作。
書籍目錄
第1部分基 礎(chǔ) 知 識
第1章從招式與內(nèi)功談起——設(shè)計模式概述
1.1設(shè)計模式從何而來
1.2設(shè)計模式是什么
1.3設(shè)計模式有什么用
1.4個人觀點
1.5知識回顧
第2章預(yù)備知識——UML類圖與面向?qū)ο笤O(shè)計原則
2.1UML概述
2.2類與類的UML圖示
2.3類之間的關(guān)系
2.4面向?qū)ο笤O(shè)計原則概述
2.5單一職責(zé)原則
2.6開閉原則
2.7里氏代換原則
2.8依賴倒轉(zhuǎn)原則
2.9接口隔離原則
2.10合成復(fù)用原則
2.11迪米特法則
2.12知識回顧
第2部分創(chuàng)建的藝術(shù)——創(chuàng)建型模式
第3章確保對象的唯一性——單例模式
3.1單例模式的動機
3.2單例模式概述
3.3負載均衡器的設(shè)計
3.4餓漢式單例與懶漢式單例的討論
3.5一種更好的單例實現(xiàn)方法
3.6單例模式總結(jié)
3.7知識回顧
第4章集中式工廠的實現(xiàn)——簡單工廠模式
4.1圖表庫的設(shè)計
4.2簡單工廠模式概述
4.3完整解決方案
4.4方案的改進
4.5創(chuàng)建對象與使用對象
4.6簡單工廠模式的簡化
4.7簡單工廠模式總結(jié)
4.8知識回顧
第5章多態(tài)工廠的實現(xiàn)——工廠方法模式
5.1日志記錄器的設(shè)計
5.2工廠方法模式概述
5.3完整解決方案
5.4反射與配置文件
5.5重載的工廠方法
5.6工廠方法的隱藏
5.7工廠方法模式總結(jié)
5.8知識回顧
第6章產(chǎn)品族的創(chuàng)建——抽象工廠模式
6.1界面皮膚庫的初始設(shè)計
6.2產(chǎn)品等級結(jié)構(gòu)與產(chǎn)品族
6.3抽象工廠模式概述
6.4完整解決方案
6.5開閉原則的傾斜性
6.6抽象工廠模式總結(jié)
6.7知識回顧
第7章對象的克隆——原型模式
7.1大同小異的工作周報
7.2原型模式概述
7.3完整解決方案
7.4帶附件的周報
7.5原型管理器的引入和實現(xiàn)
7.6原型模式總結(jié)
7.7知識回顧
第8章復(fù)雜對象的組裝與創(chuàng)建——建造者模式
8.1游戲角色設(shè)計
8.2建造者模式概述
8.3完整解決方案
8.4關(guān)于Director的進一步討論
8.5建造者模式總結(jié)
8.6知識回顧
第3部分組合的藝術(shù)——結(jié)構(gòu)型模式
第9章不兼容結(jié)構(gòu)的協(xié)調(diào)——適配器模式
9.1沒有源碼的算法庫
9.2適配器模式概述
9.3完整解決方案
9.4類適配器模式
9.5雙向適配器模式
9.6缺省適配器模式
9.7適配器模式總結(jié)
9.8知識回顧
第10章處理多維度變化——橋接模式
10.1跨平臺圖像瀏覽系統(tǒng)
10.2橋接模式概述
10.3完整解決方案
10.4適配器模式與橋接模式的聯(lián)用
10.5橋接模式總結(jié)
10.6知識回顧
第11章樹形結(jié)構(gòu)的處理——組合模式
11.1設(shè)計殺毒軟件的框架結(jié)構(gòu)
11.2組合模式概述
11.3完整解決方案
11.4透明組合模式與安全組合模式
11.5Sunny公司組織結(jié)構(gòu)
11.6組合模式總結(jié)
11.7知識回顧
第12章擴展系統(tǒng)功能——裝飾模式
12.1圖形界面構(gòu)件庫的設(shè)計
12.2裝飾模式概述
12.3完整解決方案
12.4透明裝飾模式與半透明裝飾模式
12.5裝飾模式注意事項
12.6裝飾模式總結(jié)
12.7知識回顧
第13章提供統(tǒng)一入口——外觀模式
13.1文件加密模塊的設(shè)計
13.2外觀模式概述
13.3完整解決方案
13.4抽象外觀類的引入
13.5外觀角色設(shè)計補充說明
13.6外觀模式總結(jié)
13.7知識回顧
第14章實現(xiàn)對象的復(fù)用——享元模式
14.1圍棋棋子的設(shè)計
14.2享元模式概述
14.3完整解決方案
14.4帶外部狀態(tài)的解決方案
14.5單純享元模式和復(fù)合享元模式
14.6關(guān)于享元模式的幾點補充
14.7享元模式總結(jié)
14.8知識回顧
第15章對象的間接訪問——代理模式
15.1收費商務(wù)信息查詢系統(tǒng)的設(shè)計
15.2代理模式概述
15.3完整解決方案
15.4遠程代理
15.5虛擬代理
15.6Java動態(tài)代理
15.7代理模式總結(jié)
15.8知識回顧
第4部分交互的藝術(shù)——行為型模式
第16章請求的鏈?zhǔn)教幚怼氊?zé)鏈模式
16.1采購單的分級審批
16.2職責(zé)鏈模式概述
16.3完整解決方案
16.4純與不純的職責(zé)鏈模式
16.5職責(zé)鏈模式總結(jié)
16.6知識回顧
第17章請求發(fā)送者與接收者解耦——命令模式
17.1自定義功能鍵
17.2命令模式概述
17.3完整解決方案
17.4命令隊列的實現(xiàn)
17.5撤銷操作的實現(xiàn)
17.6請求日志
17.7宏命令
17.8命令模式總結(jié)
17.9知識回顧
第18章自定義語言的實現(xiàn)——解釋器模式
18.1機器人控制程序
18.2文法規(guī)則和抽象語法樹
18.3解釋器模式概述
18.4完整解決方案
18.5再談Context的作用
18.6解釋器模式總結(jié)
18.7知識回顧
第19章遍歷聚合對象中的元素——迭代器模式
19.1銷售管理系統(tǒng)中數(shù)據(jù)的遍歷
19.2迭代器模式概述
19.3完整解決方案
19.4使用內(nèi)部類實現(xiàn)迭代器
19.5JDK內(nèi)置迭代器
19.6迭代器模式總結(jié)
19.7知識回顧
第20章協(xié)調(diào)多個對象之間的交互——中介者模式
20.1客戶信息管理窗口的初始設(shè)計
20.2中介者模式概述
20.3完整解決方案
20.4中介者與同事類的擴展
20.5中介者模式總結(jié)
20.6知識回顧
第21章撤銷功能的實現(xiàn)——備忘錄模式
21.1可悔棋的中國象棋
21.2備忘錄模式概述
21.3完整解決方案
21.4實現(xiàn)多次撤銷
21.5再談備忘錄的封裝
21.6備忘錄模式總結(jié)
21.7知識回顧
第22章對象間的聯(lián)動——觀察者模式
22.1多人聯(lián)機對戰(zhàn)游戲的設(shè)計
22.2觀察者模式概述
22.3完整解決方案
22.4JDK對觀察者模式的支持
22.5觀察者模式與Java事件處理
22.6觀察者模式與MVC
22.7觀察者模式總結(jié)
22.8知識回顧
第23章對象狀態(tài)及其轉(zhuǎn)換——狀態(tài)模式
23.1銀行系統(tǒng)中的賬戶類設(shè)計
23.2狀態(tài)模式概述
23.3完整解決方案
23.4共享狀態(tài)
23.5使用環(huán)境類實現(xiàn)狀態(tài)轉(zhuǎn)換
23.6狀態(tài)模式總結(jié)
23.7知識回顧
第24章算法的封裝與切換——策略模式
24.1電影票打折方案
24.2策略模式概述
24.3完整解決方案
24.4策略模式的兩個典型應(yīng)用
24.5策略模式總結(jié)
24.6知識回顧
第25章定義算法的框架——模板方法模式
25.1銀行利息計算模塊
25.2模板方法模式概述
25.3完整解決方案
25.4鉤子方法的使用
25.5模板方法模式總結(jié)
25.6知識回顧
第26章操作復(fù)雜對象結(jié)構(gòu)——訪問者模式
26.1OA系統(tǒng)中員工數(shù)據(jù)匯總
26.2訪問者模式概述
26.3完整解決方案
26.4訪問者模式與組合模式聯(lián)用
26.5訪問者模式總結(jié)
26.6知識回顧
參考文獻
章節(jié)摘錄
版權(quán)頁: 插圖: 在開閉原則的定義中,軟件實體可以指一個軟件模塊、一個由多個類組成的局部結(jié)構(gòu)或一個獨立的類。 任何軟件都需要面臨一個很重要的問題,即它們的需求會隨時間的推移而發(fā)生變化。當(dāng)軟件系統(tǒng)需要面對新的需求時,應(yīng)該盡量保證系統(tǒng)的設(shè)計框架是穩(wěn)定的。如果一個軟件設(shè)計符合開閉原則,那么可以非常方便地對系統(tǒng)進行擴展,而且在擴展時無須修改現(xiàn)有代碼,使得軟件系統(tǒng)在擁有適應(yīng)性和靈活性的同時具備較好的穩(wěn)定性和延續(xù)性。隨著軟件規(guī)模越來越大,軟件壽命越來越長,軟件維護成本越來越高,設(shè)計滿足開閉原則的軟件系統(tǒng)也變得越來越重要。 為了滿足開閉原則,需要對系統(tǒng)進行抽象化設(shè)計,抽象化是開閉原則的關(guān)鍵。在Java、C#等編程語言中,可以為系統(tǒng)定義一個相對穩(wěn)定的抽象層,而將不同的實現(xiàn)行為移至具體的實現(xiàn)層中完成。在很多面向?qū)ο缶幊陶Z言中都提供了接口、抽象類等機制,可以通過它們定義系統(tǒng)的抽象層,再通過具體類來進行擴展。如果需要修改系統(tǒng)的行為,無須對抽象層進行任何改動,只需要增加新的具體類來實現(xiàn)新的業(yè)務(wù)功能即可,實現(xiàn)在不修改已有代碼的基礎(chǔ)上擴展系統(tǒng)的功能,達到開閉原則的要求。 在本書所要介紹的24種設(shè)計模式中,大部分設(shè)計模式都符合開閉原則,在對每一個模式進行優(yōu)缺點評價時,都會將開閉原則作為一個重要的評價依據(jù),以判斷基于該模式設(shè)計的系統(tǒng)是否具備良好的靈活性和可擴展性。 2.7 里氏代換原則 里氏代換原則由2008年圖靈獎得主、美國第一位計算機科學(xué)女博士Barbara Liskov教授和卡內(nèi)基·梅隆大學(xué)Jeannette Wing教授于1994年提出。其嚴格表述如下:如果對每一個類型為S的對象o1,都有類型為T的對象o2,使得以T定義的所有程序P在所有的對象o1都代換成o2時,程序P的行為沒有變化,那么類型S是類型T的子類型。這個定義比較拗口且難以理解,因此一般使用它的另一個通俗版定義: 里氏代換原則表明,在軟件中將一個基類對象替換成它的子類對象,程序?qū)⒉粫a(chǎn)生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是一個子類對象的話,那么它不一定能夠使用基類對象。例如,我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據(jù)此斷定我喜歡動物,因為我并不喜歡老鼠,雖然它也是動物。
編輯推薦
《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》編輯推薦:(1)實例驅(qū)動:《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》提供了30多個項目實例,每一個模式的講解和練習(xí)都基于項目實例,讓讀者在項目實例的引導(dǎo)下學(xué)會正確選擇和合理運用設(shè)計模式,真正理解和掌握每一個設(shè)計模式。(2)問題導(dǎo)入:《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》的大多數(shù)設(shè)計模式都通過一個有問題的解決方案來導(dǎo)入,對使用模式之前的設(shè)計方案與使用模式重構(gòu)之后的設(shè)計方案進行對比分析,加深對模式的理解。(3)結(jié)構(gòu)嚴謹:《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》每一章都從項目實例分析入手,逐步引出模式定義和結(jié)構(gòu),再提供一套應(yīng)用模式的完整解決方案,然后對模式進行深入講解,最后總結(jié)模式優(yōu)缺點和適用場景,內(nèi)容編排符合學(xué)習(xí)習(xí)慣,力求通過最通俗易懂的方式來講解設(shè)計模式。(4)內(nèi)容全面:對GoF 23個常用設(shè)計模式的講解全面且細致,深入淺出,難度適中,可滿足不同層次讀者的需求。(5)邊學(xué)邊練:《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》每一章都內(nèi)嵌了適量的思考題和練習(xí)題,所有練習(xí)題也都基于項目實例,讓讀者能夠在學(xué)習(xí)的同時通過思考題和練習(xí)題來消化和進一步鞏固所學(xué)知識。(6)博客支持:《設(shè)計模式的藝術(shù):軟件開發(fā)人員內(nèi)功修煉之道》作者在CSDN開辟了設(shè)計模式專欄博客,為廣大讀者提供一個靈活的溝通和交流平臺,讀者也可以很方便地與作者進行交互。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載