認識設計模式

最近在學習JavaScript設計模式,對於剛剛起步的小白來講,對有些東西仍是很模糊的,因此整理成書面的形式,以避免之後忘記,能夠反覆的看一下。程序員

什麼是設計模式?

模式是一種可複用的解決方案,可用於解決項目開發設計中遇到的常見問題,比較咱們在編寫JavaScript應用程序的實例中。咱們定義一個模板,這個模板能夠對應多種狀況,設計模式也是如此。可是, 你不能像使用現成的函數或程序庫那樣, 拿來某個模式就將其套用到本身的程序中。 模式並非一段特定的代碼, 而是用於解決特定問題的通常性概念。面試

大部分模式都有正規的描述方式, 以便在不一樣狀況下使用。 模式的描述一般會包括如下部分:算法

  • 簡單描述問題和解決方案。
  • 將進一步解釋問題並說明模式會如何提供解決方案。
  • 展現模式的每一個部分和它們之間的關係。
  • 在不一樣語言中的實現提供流行編程語言的代碼, 讓讀者更好地理解模式背後的思想。

部分模式介紹中還列出其餘的一些實用細節,例如模式的適用性、實現步驟以及與其餘模式的關係。編程

設計模式類別

設計模式以類型劃分主要分爲三大類型,創造型設計模式、結構型設計模式、行爲設計模式,三種類型設計模式中又包含了更多的是設計模式。設計模式

1、創造型設計模式框架

建立型設計模式是一類處理對象建立的設計模式,經過某種方式控制對象的建立來避免基本對象建立時致使設計上的問題或增長設計上的複雜度。編程語言

創造模式包括:函數

  1. 簡單工廠 - 定義一個對象的工廠接口,將產品對象的實際建立工做推遲到具體子工廠類當中
  2. 工廠方法 - 基於接口數據或事件生成幾個派生類的一個實例
  3. 抽象工廠 - 建立若干系列的一個實例,無需詳述具體的類的做用
  4. 原型 - 用於複製或可克隆完成初始化的實例
  5. 單例 - 一個類在全局只有惟一的一個實例
  6. 生成器 - 表示中分離對象構建,使用相同的建立代碼生成不一樣類型和形式的對象

2、結構型設計模式工具

結構型模式與對象組合有關,一般能夠用戶找出在不一樣對象之間創建關係的簡單方法。這種模式有助於確保在程序某一部分發生變化時,系統的整個結構無需同時改變,同時對於不適合因某一特定目的而改變的系統部分,這種模式也可以幫助它們完成重組。學習

創造模式包括:

  1. 裝飾者 - 向對象動態添加備選處理方法
  2. 外觀 - 隱藏整個子系統複雜性的惟一一個類
  3. 享元 - 一個用於實現包含在別處信息的高效共享的實例,在有限的內存容量中載入更多對象
  4. 適配器 - 匹配不一樣類的接口,所以類能夠在不兼容接口的狀況下共同工做
  5. 代理 - 佔位符對象表明真正的對象,提供對象的替代品或其佔位符,代理控制着對於原對象的訪問,並容許在將請求提交給對象先後進行一些處理
  6. 橋接模式 - 可將一個大類或一系列緊密相關的類拆分爲抽象和實現兩個獨立的層次結構
  7. 組合模式 - 將對象組合成樹狀結構,而且能像使用獨立對象同樣使用它們

3、行爲設計模式

行爲模式專一於改善或者簡化系統中不一樣對象之間的通訊。

行爲模式包括:

  1. 迭代器 - 順序訪問一個集合中的元素,無需瞭解該集合的內部原理
  2. 中介者 - 在類之間定義簡化的通訊,以防止一組類顯示引用彼此,迫使他們經過一箇中介者對象進行合做
  3. 觀察者 - 向多個類通知改變的方式,以確保類之間的一致性
  4. 訪問者 - 將算法語氣做用隔離開
  5. 責任鏈 - 沿着處理者鏈進行發送,收到請求後,每一個處理者均客隊請求進行處理,或將其傳遞給鏈上的下個處理者
  6. 命令模式 - 將請求轉換成一個包含於請求相關的全部信息的獨立對象,根據不一樣的請求方法,參數化,延遲請求執行或將請求執行放入隊列中,且能實現可撤銷操做
  7. 備忘錄 - 再不暴露對象實現細節的狀況下保存和恢復對象以前的狀態
  8. 狀態模式 - 再一個對象的內部狀態變化是改變其行爲,使其看上去就像改變了自身的所屬類同樣
  9. 策略模式 - 定義一系算法,並將每一種算法分別放入獨立的類中,以使算法的對象可以相互替換
  10. 模板方法 - 在超類中定義一個算法的框架,容許子類在不修改結構的狀況下重寫算法的特定步驟


超類:被繼承的類通常稱爲「超類」,也有叫作父類。是繼承中很是重要的概念,它和子類一塊兒形象地描述了繼承的層次關係。超類設計的好與很差,首先看其內部重用率的高低,內部重用率高,必然外部重用率也高。

設計模式有什麼好處

既然學習設計模式,固然也會對咱們的工做,帶來不少好處,不然設計模式存在的價值也就不復存在了。設計模式不光帶給咱們的並不僅是良好的編碼規範,其中最重要的多是思想。

升值加薪

幾乎全部關於編程的工做面試和考覈中都會有關於模式的問題。瞭解這些知識可以幫助你發現更普遍的工做機會, 或者實現升職加薪的工做目標。

加強代碼質量

模式能讓你對已有的解決方案進行自定義, 而不用徹底自行開發。 代碼中的錯誤將更少, 由於你使用的是通過證實的標準解決方案, 它考慮了全部隱藏的問題。

利於團隊協做

設計模式定義了一種讓你和團隊成員可以更高效溝通的通用語言。你只需將模式的名稱告訴給程序員,而不須要長篇累牘地解釋本身那絕妙的設計思想以及其中各個類的做用。 不費吹灰之力就能搞定同事之間的溝通。你只需說「哦,這裏用單例就能夠了」,全部人都會理解這條建議背後的想法。只要知曉模式及其名稱,你就無需解釋什麼是單例。

更快的解決問題

設計模式是針對軟件設計中常見問題的工具箱,其中的工具就是各類通過實踐驗證的解決方案。 即便你從未遇到過這些問題,瞭解模式仍然很是有用,由於它能指導你如何使用面向對象的設計原則來解決各類問題。

反模式

反模式是軟件開發中被認爲是壞編程實踐的某些模式。用來解決共性問題從而帶來得不良的解決方案。與設計模式不一樣的是,設計模式是解決常見問題的經常使用方法,這些常見問題已經正式化,一般被認爲是一種良好的開發實踐,而反模式則是相反的,是不可取的。

有人認爲反模式是因爲將一般使用的設計模式用在了錯誤的地方,也有人認爲反模式只是一種壞習慣。簡單的來講,反模式是指在對常常面對的問題常用的低效,不良,或者有待優化的設計模式/方法。甚至,反模式也能夠是一種錯誤的開發思想/理念。

反模式的流行背後都存在頗有說服力的緣由,但反模式對可維護性和軟件的長期發展有着更爲嚴重的影響。 按照技術債務的說法,每次選擇捷徑都會產生隱含的代價,而這些代價在未來的某一時刻總要償還。 那些推遲的重構不只會影響下一次變動,並且會像經濟債務同樣持續地疊加利息。

總結

本文主要對設計模式作了一些簡單的認識和了解,接下來的一段時間筆者會不定時更新,上述所說的23種設計模式。接下來的時間咱們就一塊兒學習設計模式吧。

在學習過程當中不要太糾結於代碼,學會並理解其中的思想便可,熟練掌握並能運用其種思想在實際開發的項目中,你會發現本身成長了很大一截。

相關文章
相關標籤/搜索