『設計模式』HR:不會設計模式,你來面什麼試?(面試必備設計模式)

設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所採用。設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。這些解決方案是衆多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的
.
設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
.
毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。
.
我們不只總結GOF所提到的23種設計模式,我們也要總結一些Headfirst提到一些新的設計模式和一些額外再應用中,用的比較普遍的設計模式。文章爲總結傾向並且加入個人的思想

設計模式的七大原則

  1. 單一職責原則SRP(Single Responsibility Principle)
    就一個類而言,應該僅有一個引起它變化的原因。
  2. 開放-關閉原則OCP(Open-CLosed Principle)
    一個軟件的實體應該對擴展開放,對修改關閉。
  3. 里氏代換原則(Liskov Substitution Principle)
    子類型必須能夠替換他們的基類(父類)。
  4. 依賴倒置原則DIP(Dependence Inversion Principle)
    要依賴於抽象,不要依賴於具體。
  5. 最少知識原則LKP(Least Knowledge Principle)或稱 迪米特法則(LoD)
    一個類對於其他類知道的越少越好,就是說一個對象應當對其他對象有儘可能少的瞭解,只和朋友通信,不和陌生人說話
  6. 接口隔離原則(ISP)
    使用多個專門的接口比使用單一的功能更多的總接口要好
  7. 合成/聚合原則
    要儘量使用合成/聚合,而不是繼承關係達到複用的目的

詳細介紹戳這裏

經典23種設計模式分類

在這裏插入圖片描述

前置知識:
1. JAVA反射機制
2. 簡單工廠模式
創建型模式 (5種):
1. 工廠方法模式 (Factory Pattern)
2. 抽象工廠模式 (Abstract Factory Pattern)
3. 單例模式 (Singleton Pattern)
4. 建造者模式 (Builder Pattern)
5. 原型模式(Prototype Pattern)

結構型模式 (7種):
1. 適配器模式 (Adapter Pattern)
2. 裝飾者模式(Decorator Pattern)
3. 代理模式(Proxy Pattern)
4. 外觀模式(門面模式Facade Pattern)
5. 橋接模式 (Bridge)
6. 組合模式(Composite Pattern)
7. 享元模式(Flyweight Pattern)

行爲型模式(11種):
1. 策略模式 (Strategy Pattern)
2. 模板方法模式(Template Pattern)
3. 觀察者模式(Observer Pattern)
4. 迭代子模式(Iterator Pattern)
5. 責任鏈模式 (Chain of Responsibility Pattern)
6. 命令模式(Command Pattern)
7. 備忘錄模式(Memento Pattern)
8. 狀態模式(State Pattern)
9. 訪問者模式(Visitor Pattern)
10. 中介者模式(Mediator Pattern)
11. 解釋器模式(Interpreter Pattern)

不在23種的額外兩類:

併發型模式
1. 發佈者/訂閱者模式
線程池模式

不屬於以上,但也經常使用的:
1. 簡單工廠模式
2. MVC設計模式

推薦書籍

沒恰飯,這些是我看完或者在看到書,都是一些經典書目了,另外雖有有PDF建議大家還是入手一本。

  • 《Design Patterns: Elements of Reusable Object-Oriented Software》
    由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。這幾位作者常被稱爲"四人組(Gang of Four)就是大名鼎鼎的GOF"

  • 《Head First 設計模式》
    本書作者Eric Freeman,是作家、講師和技術顧問。完整地涵蓋了四人組版本全部23個設計模式,並介紹如何將兩個以上的設計模式結合起來成爲新的設計模式(例如著名的MVC模式),以及介紹如何進一步學習設計模式,如何發覺新的設計模式等。

  • 《大話設計模式》
    作者是程傑,本書中以情景對話的形式,用多個小故事或編程示例來組織講解GoF總結的23個設計模式,開創了國內設計模式通俗讀物的先河。用C#寫的代碼, 雖然感覺有些文章故事確實太牽強,但是覺得前兩者太枯燥的話,看看這個也是挺不錯的。看到作者的代碼挺用心的,但凡書中有所提及,都會給你一份很詳細的代碼,作者的前瞻性也很高,書中預料到了會出現一個系統統一手機軟件,果真安卓出現了,這是題外話了,這本書應該是比較早的國內寫設計模式那一批,還能流出到現在還有大量受衆的書了,C#描述。

  • 《軟件設計模式(Java版)》
    作者是程細柱,大學老師寫的,就是那種很工整的教學性質的書籍,而且每章之後都會有練習題,很適合大學生,他幾乎把所有能想到的東西,都告訴了你,也就是說他都幫你總結了,真的挺用心的老師,採用“任務驅動”的教學方法,根據各種設計模式之間的關係和相似點組織教材目錄,對每種模式提出產生背景,並用UML 建模語言分析模式的結構,然後用簡單易懂的實例加深學生對該模式的理解。

第一本是讓大家知道設計模式的鼻祖,設計模式首次總結,Headfirst也是故事形式,但是觀感一般,我學習的時候也借鑑了,所以也放在這裏,然後是程傑的大話設計模式,故事生動趣味性高,最後呢就是想用C#去看程傑,想用Java去看程細柱老師的。別說我恰飯了,好吧,程細柱老師也不是我的老師,書也是最近幾年纔開始發行的,程傑老師的書都流行多少年了,剩下兩本也衆人皆知,你百度一搜設計模式立馬就有,也不用我提。然後我的文章也是跟據上面的書,和自己的想法總結的,可能會有個小部分的雷同,但是那是確實沒有比作者能想到更好的語言,其他的都是自己提煉然後總結寫出來的,如果作者對我本人的文章有意見或者說我不能用相同的語言描述,我會立刻作出修改。
最後本文的寫作,我絕對沒有獲利一分錢,這個請大家放心白嫖,一個是自己學習以後複習可能會用到,另一個是希望和大家分享一起進步。如果沒有基礎,或者我的文章一點也看不懂還是建議大家買書,畢竟作者兩三百頁的書,博主幾萬個字就寫完了,肯定不如作者詳細。

寫在最後:
Name:風骨散人,目前是一名雙非在校大學生,預計考研,熱愛編程,熱愛技術,喜歡分享,知識無界,希望我的分享可以幫到你!名字的含義:我想有一天我能有能力隨心所欲不逾矩,不總是向生活低頭,有能力讓家人擁有富足的生活而不是爲了生計而到處奔波。“世人慌慌張張,不過是圖碎銀幾兩。偏偏這碎銀幾兩,能解世間惆悵,可讓父母安康,可護幼子成長 …”
文章主要內容:
Python,C++,C語言,JAVA,C#等語言的教程
ACM題解、模板、算法等,主要是數據結構,數學和圖論
設計模式,數據庫,計算機網絡,操作系統,計算機組成原理
Python爬蟲、深度學習、機器學習
計算機系408考研的所有專業課內容
目前還在更新中,先關注不迷路。微信公衆號,cnblogs(博客園),CSDN同名“風骨散人”

聯繫博主,側面的企業微信號就是我平時辦公用的,掃碼即可聯繫到本人,嘻嘻。

如果有什麼想看的,可以私信我,如果在能力範圍內,我會發布相應的博文!
感謝大家的閱讀!😘你的點贊、收藏、關注是對我最大的鼓勵!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章