christopher alexander說過:「每乙個模式描述了乙個在我們周圍不斷重**生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動」。儘管alexander所指的是城市和建築模式,但他的思想也同樣適用於物件導向設計模式,只是在物件導向的解決方案裡,我們用物件和介面代替了牆壁和門窗。兩類模式的核心都在於提供了相關問題的解決方案。
一般而言,乙個模式有四個基本要素:
1、模式名稱(pattern name) 乙個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名乙個新的模式增加了我們的設計詞彙。設計模式允許我們在較高的抽象層次上進行設計。基於乙個模式詞彙表,我們自己以及同事之間就可以討論模式並在編寫文件時使用它們。模式名可以幫助我們思考,便於我們與其他人交流設計思想及設計結果。找到恰當的模式名也是我們設計模式編目工作的難點之一。
2、問題(problem) 描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因後果,它可能描述了特定的設計問題,如怎樣用物件表示演算法等。也可能描述了導致不靈活設計的類或物件結構。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。
3、解決方案(solution) 描述了設計的組成成分,他們之間的相互關係及各自的職責和寫作方式。因為模式就像乙個模板,可應用於多種不同場合,所以解決方案並不描述乙個特定二聚體的設計和實現,而是提供設計問題的抽象描述和怎樣用乙個具有一般意義的元素組合(類或物件組合)來解決這個問題。
4、效果(consequences) 描述了模式應用的效果及使用模式應權衡的問題。儘管我們描述設計決策時,並不總提到模式效果,但他們對於評價設計選擇和理解使用模式的代價及好處具有重要意義。軟體效果大多關注對時間和空間的衡量,它們也標書了語言和實現問題。因為復用是物件導向設計的要素之一,所以模式效果包括他對系統的靈活性、擴充性或可移植性的影響,顯式地列出這些效果對理解和評價這些模式很有幫助。
出發點的不同會產生對什麼是模式和什麼不是模式的理解不同。乙個人的模式對另乙個人來說可能只是基本構造部件。本書中我們將在一定的抽象層次上討論模式。《設計模式》並不描述鍊錶和hash表那樣的設計,儘管他們可以用類來封裝,也可復用;也不包括哪些複雜的、特定領域內的對整個應用或子系統的設計。本書中的設計模式是對被用來在特定場景表解決一般設計問題的類和相互通訊的物件的描述。
乙個設計模式命名、抽象和確定了乙個通用設計結構的主要方面,這些設計結構能被用來構造可復用的物件導向設計。設計模式確定了所包含的類和例項,它們的角色、協作方式以及職責分配。每乙個設計模式都集中於乙個特定的物件導向設計問題或設計要點,描述了什麼時候使用它,在另一些設計約束條件下是否還能使用,以及使用的效果和如何取捨。
設計模式 什麼是設計模式
在 設計模式之禪 一書中,秦小波前輩寫到 它是一套理論,由軟體界的先輩們總結出的一套可以反覆使用的經驗,它可以提高 的可重用性 增強系統的可維護性,以及解決一系列的複雜問題 也就是說,我們開發人員的前輩曾遭遇過相同的問題,也順利地使用各種方案解決過這些問題,然後他們把這些解決方案總結成了經驗,也就是...
什麼是設計模式
什麼是模式,這是乙個看上去簡單,但是又非常不簡單的問題。我見過很多人,學習模式理論已經很長時間了,但是並不真正理解這一點。模式理論的基本思想其實起源於中國,是中國文化的固有思想。你,我,我們中每乙個自幼受到中國思想薰陶的人,都自然具有這一基本思想。模式的思想存在於中國文化的各個角落,包括哲學 法律,...
什麼是設計模式?
設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使 編制真正工程化,設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。通俗的說,...