什麼是設計模式?
一個設計模式是針對某一類問題的最佳解決方案,而且已經被成功應用於許多系統的設計中,它解決了在某種特定情境中重複發生的某個問題。因此,設計模式是從許多優秀的軟體系統中總結出成功的可複用的設計方案。
每一個設計模式描述一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。這樣,你就能一次一次的使用該方案而不必做重複勞動。
模式的目標是,把共通問題中的不變部分和變化部分分離出來。不變的部分,就構成了模式,因此,模式是一個經驗提取的“準則”,並且在一次一次的實踐中得到驗證,在不同的層次有不同的模式,小到語言實現,大到架構。在不同的層面上,模式提供不同層面的指導。
一個設計模式的四個基本要素:
1) 名稱
一個模式的名稱高度概括該模式的本質,有利於該行業統一術語,便於交流使用。
2) 問題
描述應該在何時使用模式,解釋設計問題和問題存在的前因後果,描述在怎樣的環境下使用該模式。
3) 方案
描述設計的組成部分,他們之間的相互關係及各自的職責和協作方式。
4) 效果
描述模式的應用效果及使用模式應該權衡的問題。主要效果包括使用模式對系統的靈活性,擴充性和複用性的影響。
什麼是架構?
架構不是模式,架構是針對某個領域,提供用於開發應用系統的類的集合,程式設計者可以使用架構提供的類設計一個應用程式,而且在設計應用程式時,可以針對特定的問題使用某個模式。
架構不是一種可複用的設計方案,它是由可用於設計解決某個問題的一些類組成的集合,程式設計人員通過使用架構提供的類或擴充架構提供的類進行應用程式的設計,例如:java中,開發人員使用Swing架構提供的類設計使用者介面;使用Set架構提供的類處理資料結構相關的演算法等。
模式本質上是邏輯概念,以概念的形式而存在,模式所描述的方案獨立於程式設計語言。架構的應用是以具體的軟體組織而存在,只能被特定的軟體設計者使用。
一個架構往往會包括多個設計模式,他們是物件導向系統獲得最大複用的方式,較大的物件導向應用會由多層彼此合作的架構組成,例如:java web設計中的Struts,Spring和Hibernate等架構。
架構是構成一類特定軟體可複用設計的一組相互協作的類,EJB(EnterpriseJavaBeans)是Java應用於企業計算的架構。架構通常定義了應用體系的整體結構類和對象的關係等等設計參數,以便於具體應用實現者能集中精力於應用本身的特定細節。架構主要記錄軟體應用中共同的設計決策,架構強調設計複用,因此架構設計中必然要使用設計模式。一個著名的架構往往會是許多設計模式的具體體現。