GoF設計模式 - 概述


掌握編程語言僅僅意味着掌握了如何給計算機“下命令”,而到底要計算機如何去做,怎么指揮,則是另一個問題——如何編程。設計模式是一套程序員的“武功套路”,它教我們如何去編程。雖然不遵守這個套路也是可以編程的,但是為了做到讓整支程序員軍團以整齊一致的步伐協調工作,設計模式的存在還是很有必要的。它定義了一系列的“武功套路”以及對應的招式的名稱,相當於制定好了行業內的一套規范以及術語,方便程序員軍團成員之間相互溝通。

GoF的23種設計模式

GoF是指Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides四個人,他們四個人被稱為Gang of Four,縮寫GoF。這四個人曾經合著過一本書《Design Patterns: Elements of Reusable Object-Oriented Software》,也就是大名鼎鼎的《設計模式》一書。此書流傳很廣,已經是程序員界的聖經之一了。這本書中介紹了23種設計模式,雖然設計模式其實不止這23種,但是由於這23種太常用了,所以我們一般說到設計模式,就是指GoF的23種設計模式。本文后續說的設計模式也將默認設計模式為GoF的23種設計模式。另外,我的第一語言是Java,Java也幾乎是OO界默認的語言,所以后續文章將使用Java。文章中出現的示例代碼將同步更新到java-design-pattern-samples項目

六大原則

所有的設計模式都遵循以下六個基本的設計原則。

  • 單一職責原則: The Single Responsibility Principle(SRP)
  • 開放封閉原則: The Open Closed Principle(OCP)
  • 里氏替換原則: The Liskov Substitution Principle(LSP)
  • 迪米特法則: The law of Demeter(LD)
  • 接口隔離原則: The Interface Segregation Principle(ISP)
  • 依賴倒置原則: The Dependency Inversion Principle(DIP)

六大設計原則取其英文首字母簡稱為SOLID原則。( ′◔ ‸◔`) 咦!不是六大原則嗎!為啥縮寫只有五個字母!
這個。。。我還真不知道!或許是把里氏替換原則和迪米特法則的兩個L合並成一個更好看吧!如果有知道原因的朋友可以在博客中留言告訴我!

單一職責原則

一個類只做一件事情,不要去做與這個類的主要職責無關的事情。

開放封閉原則

對擴展開放,對修改關閉。簡單的說就是類或者接口定義好之后不可進行破壞性的更新!如果沒有bug,或者修改類、接口不是為了改進內部實現機制就不應該去修改這個類。開閉原則的目的是為了保持類或者接口后續版本能夠向后兼容,這是一個最根本的原則。開閉原則是六大原則中最重要的一個,算是一個總原則吧!

雖然理論上我們應該嚴格遵守開閉原則,不過現實往往沒有那么理想化。任何一個軟件在設計的時候都無法預料到后續發展中的所有需求,所以現實情況是修改幾乎不可避免。比如Java8中為了stream加了個毀三觀的default方法,這就是一個活生生的例子。我們只能在進行設計的時候盡可能的去遵守這些原則!

和我一起在心里默念幾次程序員聖經中的上帝指示:對擴展開放,對修改關閉!對擴展開放,對修改關閉!對擴展開放,對修改關閉!

里氏替換原則

所有父類可以出現的地方,都可以透明的用子類替換。也就是說,子類可以擴展父類,但是不可以修改父類的原有功能。子類 is a 實現 of 父類

迪米特法則

迪米特法則又叫最少知識原則Least Knowledge Principle(LKP),意思是一個類應該對他自己所依賴的類知道的越少越好!我們的目標是:沒有蛀牙!😃 開玩笑的!應該是:高內聚,低耦合。

接口隔離原則

使用多個小的更具體的接口比使用一個臃腫的接口要更好!也就是說,優雅的程序需要精心呵護,所以為了保護她,我們應該鄙視太粗的接口,應該喜歡細一點的接口。😃 我知道你們在想什么,不過本司機指的不是你想的那個意思!
細一點的接口有利於重構!😃 原則就是被用來違反的!對修改關閉?怎么可能!誰寫的代碼可以一步到位永久不修改的嗎!
另外細一點的接口也有利於客戶端遵守最少知識原則。

依賴倒置原則

不要依賴具體實現,要依賴抽象!也就是面向“接口”編程而不是面向實現類編程!這樣做可以解除客戶端與實現類的耦合。

六大設計原則總結

開閉原則要求我們寫好的類不要去修改,如果需要增加功能,那么擴展它。單一職責原則要求我們一個類只做一件事情。里氏替換原則要求我們子類必須兼容父類。迪米特法則要求我們盡可能少的依賴其他的類。接口隔離原則要求我們定義接口的時候盡可能簡單一些。依賴倒置原則要求我們不能去依賴實現類!

設計模式分類

GoF23種設計模式一般分為三大類。

創建型模式

除此之外,簡單工廠模式(Simple Factory)應該也算。不過為了湊整23個模式,就不放到列表里了。

結構型模式

行為型模式

上述設計模式有鏈接的表示已經寫好了介紹的文章,可以直接戳鏈接去看對應的文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM