python设计模式有哪些_设计模式教程
設計模式是軟件設計中常見問題的典型解決方案。它們就像能根據需求進行調整的預制藍圖,可用于解決代碼中反復出現的設計問題。
設計模式與方法或庫的使用方式不同,你很難直接在自己的程序中套用某個設計模式。模式并不是一段特定的代碼,而是解決特定問題的一般性概念。你可以根據模式來實現符合自己程序實際所需的解決方案。
人們常常會混淆模式和算法,因為兩者在概念上都是已知特定問題的典型解決方案。但算法總是明確定義達成特定目標所需的一系列步驟,而模式則是對解決方案的更高層次描述。同一模式在兩個不同程序中的實現代碼可能會不一樣。
算法更像是菜譜:提供達成目標的明確步驟。而模式更像是藍圖:你可以看到最終的結果和模式的功能,但需要自己確定實現步驟。
本教程特點
中文、免費、零起點、完整示例、基于最新的 Python 3 語法。圖文并茂的解說,豐富的案例,真實代碼實現。業界最詳細,最清晰,最權威的設計模式教程。
本教程對 22 個經典設計模式以及這些模式背后的 7 個面向對象設計原則進行了說明。每章都會以一個真實世界的軟件設計問題開篇,然后使用其中一個模式來解決這個問題。接著我們會詳細分析該模式的結構及其變體,然后給出相應的示例代碼。然后會展示該模式的不同應用,講解如何分步驟地實現該模式,有時甚至會在已有程序中對其進行實現。每章內容中還包括對模式優缺點的討論,探討它與其他模式的關聯、相似和不同之處。
為什么要學習設計模式
了解設計模式能幫助你輕松應對面試和考核:幾乎所有關于編程的工作面試和考核中都會有關于模式的問題。了解這些知識能夠幫助你發現更廣泛的工作機會,或者實現升職加薪的工作目標。
了解設計模式可擴展你的編程工具箱:模式能讓你對已有的解決方案進行自定義,而不用完全自行開發。代碼中的錯誤將更少,因為你使用的是經過證明的標準解決方案,它考慮了所有隱藏的問題。
了解設計模式讓你能夠更好地與同事溝通:你只需將模式的名稱告訴給程序員,而不需要長篇累牘地解釋自己那絕妙的設計思想以及其中各個類的作用。不費吹灰之力就能搞定同事之間的溝通。
誰適合學習本教程
模式初學者:如果你從未學習過模式,本書會講解面向對象程序設計的基本原則,并且提供真實示例。在深入學習模式之前,我們會先了解模式背后的基礎性設計理念和原則。
希望復習模式知識的讀者:如果你以前學習過模式,但是已經忘記了很多內容,本書不僅能幫你重拾記憶,還能是一本便捷的參考手冊。你可以快速找到自己感興趣的章節,無需從頭到尾地進行閱讀。
開始使用新編程語言的讀者:如果你正在著手使用一種新的面向對象的地的編程語言(Java、 C#、 C++、 PHP、 Python、 Ruby、 Swift 或 TypeScript),那么本書中眾多的真實世界示例和類比(包含精心制作的圖表)將幫助你迅速抓住隱藏在字里行間的關鍵信息。
模式包含哪些內容?
軟件設計模式使人們可以更加簡單方便地復用成功的設計和體系結構,它通常包含以下幾個基本要素:模式名稱、別名、動機、問題、解決方案、效果、結構、模式角色、合作關系、實現方法、適用性、已知應用、例程、模式擴展和相關模式等,其中最關鍵的元素包括以下 4 個主要部分。
模式名稱:每一個模式都有自己的名字,通常用一兩個詞來描述,可以根據模式的問題、特點、解決方案、功能和效果來命名。模式名稱(PatternName)有助于我們理解和記憶該模式,也方便我們來討論自己的設計。
問題:問題(Problem)描述了該模式的應用環境,即何時使用該模式。它解釋了設計問題和問題存在的前因后果,以及必須滿足的一系列先決條件。
解決方案:模式問題的解決方案(Solution)包括設計的組成成分、它們之間的相互關系及各自的職責和協作方式。因為模式就像一個模板,可應用于多種不同場合,所以解決方案并不描述一個特定而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象的 組合)來解決這個問題。
效果:描述了模式的應用效果以及使用該模式應該權衡的問題,即模式的優缺點。主要是對時間和空間的衡量,以及該模式對系統的靈活性、擴充性、可移植性的影響,也考慮其實現問題。顯式地列出這些效果(Consequence)對理解和評價這些模式有很大的幫助。
模式的歷史
誰發明了設計模式?這是一個很好的問題,但也有點不太準確。設計模式并不是晦澀的、復雜的概念——事實恰恰相反。模式是面向對象設計中常見問題的典型解決方案。同樣的解決方案在各種項目中得到了反復使用,所以最終有人給它們起了名字,并對其進行了詳細描述。這基本上就是模式被發現的歷程了。
模式的概念是由克里斯托佛·亞歷山大在其著作《建筑模式語言》中首次提出的。本書介紹了城市設計的“語言”,而此類“語言”的基本單元就是模式。模式中可能會包含對窗戶應該在多高、一座建筑應該有多少層以及一片街區應該有多大面積的植被等信息的描述。
埃里希·伽瑪、約翰·弗利賽德斯、拉爾夫·約翰遜和理查德·赫爾姆這四位作者接受了模式的概念。1994 年,他們出版了《設計模式:可復用面向對象軟件的基礎》一書,將設計模式的概念應用到程序開發領域中。該書提供了
23 個模式來解決面向對象程序設計中的各種問題,很快便成為了暢銷書。由于書名太長,人們將其簡稱為“四人組(Gang of Four,GoF)的書”,并且很快進一步簡化為“GoF 的書”。
此后,人們又發現了幾十種面向對象的模式。?“模式方法”開始在其他程序開發領域中流行起來。如今,在面向對象設計領域之外,人們也提出了許多其他的模式。
關于模式的爭議
設計模式自其誕生之初似乎就飽受爭議,所以讓我們來看看針對模式的最常見批評吧。
一種針對不完善編程語言的蹩腳解決方案
通常當所選編程語言或技術缺少必要的抽象功能時,人們才需要設計模式。在這種情況下,模式是一種可為語言提供更優功能的蹩腳解決方案。
例如,策略模式在絕大部分現代編程語言中可以簡單地使用匿名(lambda)函數來實現。
低效的解決方案
模式試圖將已經廣泛使用的方式系統化。許多人會將這樣的統一化認為是某種教條,他們會“全心全意”地實施這樣的模式,而不會根據項目的實際情況對其進行調整。
不當使用如果你只有一把鐵錘,那么任何東西看上去都像是釘子。
這個問題常常會給初學模式的人們帶來困擾:在學習了某個模式后,他們會在所有地方使用該模式,即便是在較為簡單的代碼也能勝任的地方也是如此。
設計模式分類
不同設計模式的復雜程度、細節層次以及在整個系統中的應用范圍等方面各不相同。我喜歡將其類比于道路的建造:如果你希望讓十字路口更加安全,那么可以安裝一些交通信號燈,或者修建包含行人地下通道在內的多層互通式立交橋。
最基礎的、底層的模式通常被稱為慣用技巧。這類模式一般只能在一種編程語言中使用。
最通用的、高層的模式是構架模式。開發者可以在任何編程語言中使用這類模式。與其他模式不同,它們可用于整個應用程序的架構設計。
此外,所有模式可以根據其意圖或目的來分類。本書覆蓋了三種主要的模式類別:
創建型模式
這類模式提供創建對象的機制, 能夠提升已有代碼的靈活性和可復用性。
結構型模式
這類模式介紹如何將對象和類組裝成較大的結構, 并同時保持結構的靈活和高效。
行為模式
這類模式負責對象間的高效溝通和職責委派。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python设计模式有哪些_设计模式教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样把u盘里的字体安装到电脑(电脑里安装
- 下一篇: python 数据去重_科学网—pyth