前 言Preface
在我剛開始學(xué)習(xí)Python時,Python超級簡單的編程方式和簡單易學(xué)的基本程序給我留下了深刻的印象。Python語言的語法非常簡單,不需要記憶括號或分號。不同于那些需要使用鍵創(chuàng)建4個首行縮進(jìn)的空格的編程語言,Python編程簡單易學(xué)。
使用Python幾周后,我認(rèn)識到Python語言是如此令人難以置信,它可以實(shí)現(xiàn)非常強(qiáng)大的功能。Python是一門完全面向?qū)ο蟮恼Z言,用戶可利用它輕松創(chuàng)建類并設(shè)定數(shù)據(jù)的使用范圍,不必為復(fù)雜的語法而煩惱。
事實(shí)上,當(dāng)我用Python重新編寫幾年前曾用Java編寫的程序時,我為Python的簡單易用感到驚訝。同時,Python強(qiáng)大的集成開發(fā)環(huán)境(IDE),大大減少了程序編寫中的錯誤數(shù)量。
當(dāng)我用Python很快完成許多任務(wù)時,我意識到是時候?qū)懸槐娟P(guān)于Python的書了。我用Python語言重新編寫了全新、干凈、可讀的23個經(jīng)典設(shè)計(jì)模式,由此誕生了本書。本書展示了面向?qū)ο蟮幕A(chǔ)知識、可視化編程,以及如何使用經(jīng)典設(shè)計(jì)模式。學(xué)習(xí)者可以在GitHub上找到相關(guān)程序的全部開源代碼,GitHub代碼庫鏈接如下:https://github.com/jwcnmr/jameswcooper/
tree/main/Pythonpatterns。
本書旨在幫助Python程序愛好者拓寬面向?qū)ο缶幊蹋∣OP) 和設(shè)計(jì)模式的相關(guān)知識。
如果讀者是一位Python編程的新手,可以直接學(xué)習(xí)第31章~第35章的Python基礎(chǔ)知識,然后返回第1章學(xué)習(xí)。
如果讀者是一位有經(jīng)驗(yàn)的Python編程人員,可以從第1章開始學(xué)習(xí)面向?qū)ο缶幊毯驮O(shè)計(jì)模式的相關(guān)知識,按個人喜好,也可以跳過第2章和第3章,直接學(xué)習(xí)后面的內(nèi)容。
Python是所有編程語言中最容易學(xué)習(xí)的一門語言,通過運(yùn)用設(shè)計(jì)模式,實(shí)現(xiàn)各種對象十分容易。隨后,讀者將了解到對象可以做什么以及在工作中如何使用對象。
在任何情況下,面向?qū)ο缶幊痰姆椒ǘ加兄谧x者編寫更好的、更容易被重復(fù)利用的程序代碼。
本書結(jié)構(gòu)
本書由以下五個部分構(gòu)成。
第一部分 設(shè)計(jì)模式基礎(chǔ)
從本質(zhì)上說,設(shè)計(jì)模式描述的是對象間的有效互動。本書第1章介紹對象的相關(guān)內(nèi)容,并提供圖形化實(shí)例來演示模式是如何工作的。
第2章和第3章介紹Python可視化編程工具—tkinter庫,用于創(chuàng)建窗口、按鈕、列表、表格等對象。
第4章介紹設(shè)計(jì)模式的定義及其相關(guān)內(nèi)容。
第二部分 創(chuàng)建型模式
第5章介紹基本的工廠模式,它是第6章的基礎(chǔ)。
第6章介紹工廠方法模式。在此模式中,父類將創(chuàng)建實(shí)例對象的決定交給每個子類。
第7章討論抽象工廠模式。抽象工廠模式是一個工廠對象,它返回幾組類之一。
第8章介紹單例模式,它所描述的類中不能有多個實(shí)例。單例模式提供了對此實(shí)例的單個全局訪問點(diǎn)。該模式并不常用,但了解該模式非常有幫助。
第9章介紹生成器模式,該模式將復(fù)雜對象的構(gòu)造與其可視化表示分開,以便可以根據(jù)程序的需要創(chuàng)建不同的表示形式。
第10章展示通過原型模式創(chuàng)建一個類實(shí)例是多么耗時且復(fù)雜。對于復(fù)雜對象,通常需要復(fù)制原始實(shí)例對象并酌情做出修改,而不是創(chuàng)建多個實(shí)例。
第11章總結(jié)第二部分的模式。
第三部分 結(jié)構(gòu)型模式
第12章介紹適配器模式,該模式用于將一個類的編程接口轉(zhuǎn)換為另一個類的編程接口。適配器在不相關(guān)的多個類在同一個程序中協(xié)同工作時非常有用。
第13章介紹橋接模式,該模式旨在將類的接口與其實(shí)現(xiàn)代碼分開。這使用戶能夠在不更改客戶端代碼的情況下改變或更換類的實(shí)現(xiàn)代碼。
第14章介紹組合模式,該模式適用于組件是單個對象或?qū)ο蟮募系那闆r,通常采用樹狀結(jié)構(gòu)。
第15章介紹裝飾器模式,該模式提供了一種用戶可修改單個對象的行為而不必創(chuàng)建新的派生類的方法。該模式雖然可以應(yīng)用于按鈕等可視化對象,但在 Python 中最常見的用途是創(chuàng)建一種修改單個類實(shí)例行為的宏。
第16章介紹外觀模式,闡述如何使用外觀模式編寫一個簡化的代碼接口。
第17章介紹享元模式,該模式用于將一些數(shù)據(jù)移到類外,以減少對象的數(shù)量。
第18章介紹代理模式,該模式適用于以簡單的對象表示復(fù)雜的對象,或創(chuàng)建耗時的對象的情況。如果創(chuàng)建一個對象需要花費(fèi)大量時間或占用大量計(jì)算機(jī)資源,那么可以使用代理模式,代理模式可以實(shí)現(xiàn)延遲創(chuàng)建,直到真正需要該對象為止。
第19章總結(jié)了第三部分的模式。
第四部分 行為型模式
第20章介紹責(zé)任鏈模式,該模式展示請求如何從鏈中的一個對象傳遞到下一個對象,直到請求被識別,實(shí)現(xiàn)對象之間的解耦。
第21章介紹命令模式,展示了命令模式如何使用簡單的對象執(zhí)行軟件命令。 此外,該模式支持日志記錄和可撤銷的操作。
第22章介紹解釋器模式,該模式展示了如何創(chuàng)建一個小型執(zhí)行語言,并將其包含在應(yīng)用程序中。
第23章介紹迭代器模式,該模式描述了遍歷對象集合中的元素的方法。
第24章介紹中介者模式,該模式通過使用獨(dú)立的對象來簡化對象之間的通信,所有對象之間不必相互了解。
第25章介紹備忘錄模式,該模式能保存對象的內(nèi)部狀態(tài),以便用戶以后可以恢復(fù)對象信息。
第26章介紹觀察者模式,該模式允許用戶在程序狀態(tài)發(fā)生變化時將更改通知給多個對象。
第27章介紹狀態(tài)模式,該模式允許對象在內(nèi)部狀態(tài)發(fā)生變化時修改自身的行為。
第28章介紹策略模式,該模式與狀態(tài)模式類