Home >> Blog >> Design pattern 軟體工程必須面對的設計模式

設計模式

在軟體工程中,設計模式是針對軟體設計中常見問題的通用可重複解決方案,尤其是面對相同產業的SEO優化方案時就可以應用設計模式來處理以節省人力與時間。設計模式不是可以直接轉換為程式碼的完成設計。它是關於如何解決問題的描述或模板,可以在許多不同的情況下使用。

設計模式的使用

設計模式可以通過提供經過測試的、經過驗證的開發範例來加速開發過程。有效的軟體設計需要考慮在實施後期才可能顯現的問題。重用設計模式有助於防止可能導致重大問題的細微問題,並提高熟悉模式的程式設計人員和架構師的程式碼可讀性。

通常,人們只了解如何將某些軟體設計技術應用於某些問題。這些技術很難應用於更廣泛的問題。設計模式提供通用解決方案,以不需要與特定問題相關的細節的格式記錄。

此外,模式允許開發人員使用眾所周知的、易於理解的軟體交互名稱進行通信。常見的設計模式可以隨著時間的推移而改進,使其比臨時設計更健壯。

創造型設計模式

這些設計模式都是關於類實例化的。這種模式可以進一步分為類創建模式和對象創建模式。雖然類創建模式在實例化過程中有效地使用繼承,但對象創建模式有效地使用委託來完成工作。

  • 抽象工廠
    創建幾個類族的實例
  • Builder
    將對象構造與其表示分離
  • 工廠方法
    創建幾個派生類的實例
  • 對像池
    通過回收不再使用的對象來避免昂貴的資源獲取和釋放
  • 原型
    要複製或clone的完全初始化的實例

  • 例 只能存在一個實例的類

結構設計模式

這些設計模式都是關於類和對象的組合。結構類創建模式使用繼承來組合接口。結構對像模式定義了組合對像以獲得新功能的方式。

  • 不同類的 適配器匹配接口
  • Bridge
    將對象的接口與其實現分開
  • 複合
    簡單和復合對象的樹結構
  • 裝飾器
    動態地為對象添加職責
  • Facade
    代表整個子系統的單個類
  • Flyweight
    用於高效共享的細粒度實例
  • 私有類數據
    限制訪問器/修改器訪問
  • 代理
    代表另一個對象的對象

行為設計模式

這些設計模式都是關於類的對象通信的。行為模式是那些最特別關注對象之間通信的模式。

  • 責任
    鏈 在對象鏈之間傳遞請求的一種方式
  • Command
    將命令請求封裝為對象
  • 解釋器
    一種在程序中包含語言元素的方法
  • 迭代器
    順序訪問集合的元素
  • 中介者
    定義類之間的簡化通信
  • Memento
    捕獲並恢復對象的內部狀態
  • 空對象
    旨在充當對象的默認值
  • 觀察者
    一種通知多個類變化的方法
  • 狀態
    當對象的狀態改變時改變其行為
  • 策略
    將算法封裝在一個類中
  • 模板方法
    將算法的確切步驟推遲到子類
  • 訪問者
    為類定義一個新的操作而不做任何改變

批評

設計模式的概念在計算機科學領域受到了一些人的批評。

針對錯誤的問題

對模式的需求源於使用抽象能力不足的計算機語言或技術。在理想的因式分解下,一個概念不應該被複製,而只是被引用。但是,如果某些東西被引用而不是複制,那麼標籤和目錄就沒有“模式”。

Peter Norvig 提供了類似的論點。他證明了設計模式一書中的 23 種模式中的 16 種(主要關注 C++)在 Lisp 或 Dylan 中被簡化或消除(通過直接語言支持)。

缺乏正式的基礎

對設計模式的研究過於臨時性,有些人認為這個概念非常需要建立在更正式的基礎上。在 OOPSLA 1999上,四人幫(在他們的全力合作下)接受了一場表演審判,其中他們被“指控”了多項危害計算機科學的罪行。他們被出席審判的“陪審員”中的⅔“定罪”。

導致低效的解決方案

設計模式的想法是試圖標準化已經被接受的最佳實踐。原則上這似乎是有益的,但在實踐中,它經常導致不必要的程式碼重複。使用結構良好的實現而不是“勉強夠好”的設計模式幾乎總是一種更有效的解決方案。

與其他抽像沒有顯著差異

一些作者聲稱設計模式與其他形式的抽像沒有顯著差異,並且沒有必要使用新的術語(從架構社群借來)來描述編程領域的現有現象。模型-視圖-控制器範式被吹捧為“模式”的一個例子,它比“設計模式”的概念早了幾年。一些人進一步認為,設計模式社群的主要貢獻是使用 Alexander 的模式語言作為一種文檔形式。一種在文獻中經常被忽視的做法。