目錄
- 設計模式是什么?
- 設計模式包含哪些內容?
- 設計模式的歷史
- 為什么以及如何學習設計模式?
- 關于模式的爭議
- 一種針對不完善編程語言的蹩腳解決方案
- 低效的解決方案
- 不當使用
- 設計模式的分類
設計模式是什么?
設計模式是軟體設計中常見問題的解決方案,他們可以根據需求調整自己的預制藍圖,可以解決代碼中反復出現過的設計問題,
設計模式與方法或庫的使用方式不同,很難直接套用在自己的程式中,模式并不是指一段特定的代碼,而是解決問題的一般性概念,你可以根據設計模式來實作符合自己程式實際所需的解決方案,
大多數人會分不清出模式和演算法,因為兩者在概念上都是已知特定問題的典型解決方案,但是演算法總是明確定義達成特定目標所需的一系列步驟,而步驟則是對解決問題的更高層次描述,同一個設計模式在兩個不同的程式中實作的代碼可能會不一樣,
演算法更像是菜譜,教你一步一步的達成目標,而設計模式更像是藍圖,你可以看到最終的結果和模式的功能,但是需要自己確定實作步驟,
設計模式包含哪些內容?
大部分設計模式都有正規的描述方式,以便在不同情況下使用,模式的描述通常會包括一下部分:
- 意圖:簡單描述問題和解決方案
- 動機:進一步解釋問題并說明模式會如何提供解決方案
- 結構:展示模式之間的每個部分和它們之間的關系
- 在不同的語言中的實作提供流行編程語言的代碼,讓讀者更好地理解設計模式背后的思想,
設計模式的歷史
誰發明了設計模式? 這是一個很好的問題, 但也有點不太準確, 設計模式并不是晦澀的、 復雜的概念——事實恰恰相反, 模式是面向物件設計中常見問題的典型解決方案, 同樣的解決方案在各種專案中得到了反復使用, 所以最終有人給它們起了名字, 并對其進行了詳細描述, 這基本上就是模式被發現的歷程了,
模式的概念是由克里斯托佛·亞歷山大在其著作 《建筑模式語言》 中首次提出的, 本書介紹了城市設計的 “語言”, 而此類 “語言” 的基本單元就是模式, 模式中可能會包含對窗戶應該在多高、 一座建筑應該有多少層以及一片街區應該有多大面積的植被等資訊的描述,
埃里希·伽瑪、 約翰·弗利賽德斯、 拉爾夫·約翰遜和理查德·赫爾姆這四位作者接受了模式的概念, 1994 年, 他們出版了 《設計模式: 可復用面向物件軟體的基礎》 一書, 將設計模式的概念應用到程式開發領域中, 該書提供了 23 個模式來解決面向物件程式設計中的各種問題, 很快便成為了暢銷書, 由于書名太長, 人們將其簡稱為 “四人組 (Gang of Four, GoF) 的書”, 并且很快進一步簡化為 “GoF 的書”,
此后, 人們又發現了幾十種面向物件的模式, ? “模式方法” 開始在其他程式開發領域中流行起來, 如今, 在面向物件設計領域之外, 人們也提出了許多其他的模式,
為什么以及如何學習設計模式?
或許你已經從事程式開發作業多年,但是完全不知道單例模式是什么,很多人都是這樣,即便如此,你可能會在自己不知情的情況下已經使用過一些設計模式了,所以我們為什么不花一些時間來進一步學習設計模式呢?
- 設計模式是針對軟體設計中常見問題的工具箱, 其中的工具就是各種經過實踐驗證的解決方案, 即使你從未遇到過這些問題, 了解模式仍然非常有用, 因為它能指導你如何使用面向物件的設計原則來解決各種問題,
- 設計模式定義了一種讓你和團隊成員能夠更高效溝通的通用語言, 你只需說 “哦, 這里用單例就可以了”, 所有人都會理解這條建議背后的想法, 只要知曉模式及其名稱, 你就無需解釋什么是單例,
關于模式的爭議
設計模式自其誕生之初似乎就飽受爭議, 所以讓我們來看看針對模式的最常見批評吧,
一種針對不完善編程語言的蹩腳解決方案
通常當所選編程語言或技術缺少必要的抽象功能時, 人們才需要設計模式, 在這種情況下, 模式是一種可為語言提供更優功能的蹩腳解決方案,
例如, 策略模式在絕大部分現代編程語言中可以簡單地使用匿名 (lambda) 函式來實作,
低效的解決方案
模式試圖將已經廣泛使用的方式系統化, 許多人會將這樣的統一化認為是某種教條, 他們會 “全心全意” 地實施這樣的模式, 而不會根據專案的實際情況對其進行調整,
不當使用
這個問題常常會給初學模式的人們帶來困擾: 在學習了某個模式后, 他們會在所有地方使用該模式, 即便是在較為簡單的代碼也能勝任的地方也是如此,
設計模式的分類
不同設計模式的復雜程度、 細節層次以及在整個系統中的應用范圍等方面各不相同, 我喜歡將其類比于道路的建造: 如果你希望讓十字路口更加安全, 那么可以安裝一些交通信號燈, 或者修建包含行人地下通道在內的多層互通式立交橋,
最基礎的、 底層的模式通常被稱為慣用技巧, 這類模式一般只能在一種編程語言中使用,
最通用的、 高層的模式是構架模式, 開發者可以在任何編程語言中使用這類模式, 與其他模式不同, 它們可用于整個應用程式的架構設計,
此外, 所有模式可以根據其意圖或目的來分類,這里推薦三種主要的模式類別:
- 創建型模式提供創建物件的機制, 增加已有代碼的靈活性和可復用性
- 結構型模式介紹如何將物件和類組裝成較大的結構, 并同時保持結構的靈活和高效
- 行為模式負責物件間的高效溝通和職責委派
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342179.html
標籤:其他
上一篇:java人事考勤打卡小程式原始碼
