在軟件開發(fā)過程中,一個系統(tǒng)成敗的關鍵就是在于其設計,如果系統(tǒng)設計的很好,那么在后續(xù)開發(fā)中就能少走彎路,并且在后續(xù)的系統(tǒng)維護中,能夠簡單、輕松,但如果系統(tǒng)設計中就出現(xiàn)了問題,那么這個系統(tǒng)的開發(fā)必然是痛苦的,編程人員的不停抱怨,維護人員的痛苦掙扎,最終導致系統(tǒng)的報廢,沒有人愿意再去關注它。
因此,人們非常希望能夠在新的軟件開發(fā)過程中使用那些在軟件系統(tǒng)設計、開發(fā)過程中長期積累的很多好的、有價值的經(jīng)驗,來提高新系統(tǒng)的開發(fā)效率,保證新系統(tǒng)能夠穩(wěn)定、安全、易于維護。
所以,如何將這些有價值的經(jīng)驗記錄下來,能夠很好的交流、傳遞就顯得非常重要。對這些直接的、原始的經(jīng)驗,采用面向對象的方法進行抽象,提煉出很多的模式,這些模式很清晰的說明了它們所表達的關聯(lián)、問題和解決方式之間的關系。而這些在軟件設計上積累、抽象出來的模式,我們稱之為設計模式。
設計模式的概念
簡單地說,模式是一個出現(xiàn)在世界上的實物,同時也是一條規(guī)則,告訴你應該如何創(chuàng)建一個實物、應該在何時創(chuàng)建。它既是過程,也是實物;既是對當前實物的描述,也是對創(chuàng)建實物的過程的描述。我們需要這樣一種語言:它讓我們高效地交流、討論那些常見的、重復出現(xiàn)的設計概念,并在這些概念上建立起我們的系統(tǒng)。不要僅僅把模式當作解決方案,而要把它們當作設計的詞匯,這些詞匯可以根據(jù)一定的規(guī)則組合起來形成句子(也就是系統(tǒng)設計)。
C. Alexander描述:“每個模式是一個有三個部分的規(guī)則,它表達一定的關聯(lián)、一個問題和一個解決方式之間的關系?!?BR> 設計模式可以使人們更加方便的復用成功的設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)的開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好的完成系統(tǒng)設計。
設計模式的分類
在《設計模式》書中共給出了二十三個模式。這二十三又根據(jù)其表現(xiàn)不同可分成了幾類。各個模式是在不同場景下,不同問題的解決方案。
創(chuàng)建型模式
創(chuàng)建型模式抽象了實例化過程。它們幫助一個系統(tǒng)獨立于如何創(chuàng)建、組合和表示它的那些對象。一個類創(chuàng)建型模式使用繼承改變被實例化的類,而一個對象創(chuàng)建型模式將實例化委托給另一個對象。
隨著系統(tǒng)演化得越來越依賴于對象復合而不是類繼承,創(chuàng)建型模式變得更為重要。當這種情況發(fā)生時,重心從對一組固定行為得硬編碼轉移為定義一個較小的基本行為集,這些行為可以被組合成任意數(shù)目的更為復雜的行為。這樣創(chuàng)建有特定行為的對象要求的不僅僅是實例化一個類。
創(chuàng)建型模式中有兩個不斷出現(xiàn)的主旋律。第一,它們都將關于該系統(tǒng)使用哪些具體的類的信息封裝起來。第二,它們隱藏了這些類的實例是如何被創(chuàng)建和放在一起的。整個系統(tǒng)關于這些對象所知道的是由抽象類所定義的接口。因此,創(chuàng)建型模式在什么被創(chuàng)建,誰創(chuàng)建它,它是怎樣被創(chuàng)建的,以及何時創(chuàng)建這些方面給予你很大的靈活性。它們允許你使用結構和功能差別很大的“產(chǎn)品”對象配置一個系統(tǒng)。配置可以是靜態(tài)的(即在編譯時指定),也可以是動態(tài)的(在運行時)。
結構型模式
結構型模式涉及到如何組合類和對象以獲得更大的結構。結構型模式采用繼承機制來組合接口或實現(xiàn)。一個簡單的例子是采用多重繼承方法將兩個以上的類組合成一個類,結果這個類包含了所有父類的性質(zhì)。這一模式尤其有助于多個獨立開發(fā)的類庫協(xié)同工作。
結構型對象模式不是對接口和實現(xiàn)進行組合,而是描述了如何對一些對象進行組合,從而實現(xiàn)新功能的一些方法。因為可以在運行時刻改變對象組合關系,所以對象組合方式具有更大的靈活性,而這種機制用靜態(tài)類組合是不可能實現(xiàn)的。
行為模式
行為模式涉及到算法和對象間職責的分配。行為模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的復雜的控制流。它們將你的注意力從控制流轉移到對象間的聯(lián)系方式上來。
行為類模式使用繼承機制在類間分派行為。本章包括兩個這樣的模式。
行為對象模式使用對象復合而不是繼承。一些行為對象模式描述了一組對等的對象怎樣相互協(xié)作以完成其中任一個對象都無法單獨完成的任務。這里一個重要的問題是對等的對象如何了解對方。對等對象可以保持顯式的對對方的引用,但那會增加它們的耦合度。在極端的情況下,每一個對象都要了解所有其他的對象。
從設計模式中得到的收獲
設計模式是系統(tǒng)地命名、解釋和評價了面向對象系統(tǒng)中一個重要的和重復出現(xiàn)的設計,其目標是將設計經(jīng)驗以人們能夠有效利用的形式記錄下來。設計模式使人們可以更加簡單方便地復用成功地設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)復用的選擇,避免設計損害了系統(tǒng)復用性。通過提供一個顯示類和對象作用關系以及它們之間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好地完成系統(tǒng)設計。
模式的絕大多數(shù)好處都來自于原封不動的使用,也就是說,沒有任何形式的外部支持,這帶來了四大好處:
1. 它們記錄了專家的經(jīng)驗,并且讓非專家也能理解。
2. 它們的名稱構成了一份詞匯表,幫助開發(fā)者更好的交流。
3. 它們幫助人們更快的理解一個系統(tǒng),只要這個系統(tǒng)是用模式的方式描述的。
4. 它們使系統(tǒng)的重組變得更容易,不管原來的系統(tǒng)是否以模式的方式設計的。
因此,人們非常希望能夠在新的軟件開發(fā)過程中使用那些在軟件系統(tǒng)設計、開發(fā)過程中長期積累的很多好的、有價值的經(jīng)驗,來提高新系統(tǒng)的開發(fā)效率,保證新系統(tǒng)能夠穩(wěn)定、安全、易于維護。
所以,如何將這些有價值的經(jīng)驗記錄下來,能夠很好的交流、傳遞就顯得非常重要。對這些直接的、原始的經(jīng)驗,采用面向對象的方法進行抽象,提煉出很多的模式,這些模式很清晰的說明了它們所表達的關聯(lián)、問題和解決方式之間的關系。而這些在軟件設計上積累、抽象出來的模式,我們稱之為設計模式。
設計模式的概念
簡單地說,模式是一個出現(xiàn)在世界上的實物,同時也是一條規(guī)則,告訴你應該如何創(chuàng)建一個實物、應該在何時創(chuàng)建。它既是過程,也是實物;既是對當前實物的描述,也是對創(chuàng)建實物的過程的描述。我們需要這樣一種語言:它讓我們高效地交流、討論那些常見的、重復出現(xiàn)的設計概念,并在這些概念上建立起我們的系統(tǒng)。不要僅僅把模式當作解決方案,而要把它們當作設計的詞匯,這些詞匯可以根據(jù)一定的規(guī)則組合起來形成句子(也就是系統(tǒng)設計)。
C. Alexander描述:“每個模式是一個有三個部分的規(guī)則,它表達一定的關聯(lián)、一個問題和一個解決方式之間的關系?!?BR> 設計模式可以使人們更加方便的復用成功的設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)的開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好的完成系統(tǒng)設計。
設計模式的分類
在《設計模式》書中共給出了二十三個模式。這二十三又根據(jù)其表現(xiàn)不同可分成了幾類。各個模式是在不同場景下,不同問題的解決方案。
創(chuàng)建型模式
創(chuàng)建型模式抽象了實例化過程。它們幫助一個系統(tǒng)獨立于如何創(chuàng)建、組合和表示它的那些對象。一個類創(chuàng)建型模式使用繼承改變被實例化的類,而一個對象創(chuàng)建型模式將實例化委托給另一個對象。
隨著系統(tǒng)演化得越來越依賴于對象復合而不是類繼承,創(chuàng)建型模式變得更為重要。當這種情況發(fā)生時,重心從對一組固定行為得硬編碼轉移為定義一個較小的基本行為集,這些行為可以被組合成任意數(shù)目的更為復雜的行為。這樣創(chuàng)建有特定行為的對象要求的不僅僅是實例化一個類。
創(chuàng)建型模式中有兩個不斷出現(xiàn)的主旋律。第一,它們都將關于該系統(tǒng)使用哪些具體的類的信息封裝起來。第二,它們隱藏了這些類的實例是如何被創(chuàng)建和放在一起的。整個系統(tǒng)關于這些對象所知道的是由抽象類所定義的接口。因此,創(chuàng)建型模式在什么被創(chuàng)建,誰創(chuàng)建它,它是怎樣被創(chuàng)建的,以及何時創(chuàng)建這些方面給予你很大的靈活性。它們允許你使用結構和功能差別很大的“產(chǎn)品”對象配置一個系統(tǒng)。配置可以是靜態(tài)的(即在編譯時指定),也可以是動態(tài)的(在運行時)。
結構型模式
結構型模式涉及到如何組合類和對象以獲得更大的結構。結構型模式采用繼承機制來組合接口或實現(xiàn)。一個簡單的例子是采用多重繼承方法將兩個以上的類組合成一個類,結果這個類包含了所有父類的性質(zhì)。這一模式尤其有助于多個獨立開發(fā)的類庫協(xié)同工作。
結構型對象模式不是對接口和實現(xiàn)進行組合,而是描述了如何對一些對象進行組合,從而實現(xiàn)新功能的一些方法。因為可以在運行時刻改變對象組合關系,所以對象組合方式具有更大的靈活性,而這種機制用靜態(tài)類組合是不可能實現(xiàn)的。
行為模式
行為模式涉及到算法和對象間職責的分配。行為模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的復雜的控制流。它們將你的注意力從控制流轉移到對象間的聯(lián)系方式上來。
行為類模式使用繼承機制在類間分派行為。本章包括兩個這樣的模式。
行為對象模式使用對象復合而不是繼承。一些行為對象模式描述了一組對等的對象怎樣相互協(xié)作以完成其中任一個對象都無法單獨完成的任務。這里一個重要的問題是對等的對象如何了解對方。對等對象可以保持顯式的對對方的引用,但那會增加它們的耦合度。在極端的情況下,每一個對象都要了解所有其他的對象。
從設計模式中得到的收獲
設計模式是系統(tǒng)地命名、解釋和評價了面向對象系統(tǒng)中一個重要的和重復出現(xiàn)的設計,其目標是將設計經(jīng)驗以人們能夠有效利用的形式記錄下來。設計模式使人們可以更加簡單方便地復用成功地設計和體系結構。將已證實的技術表述成設計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設計思路。設計模式幫助你做出有利于系統(tǒng)復用的選擇,避免設計損害了系統(tǒng)復用性。通過提供一個顯示類和對象作用關系以及它們之間潛在聯(lián)系的說明規(guī)范,設計模式甚至能夠提高已有系統(tǒng)的文檔管理和系統(tǒng)維護的有效性。簡而言之,設計模式可以幫助設計者更快更好地完成系統(tǒng)設計。
模式的絕大多數(shù)好處都來自于原封不動的使用,也就是說,沒有任何形式的外部支持,這帶來了四大好處:
1. 它們記錄了專家的經(jīng)驗,并且讓非專家也能理解。
2. 它們的名稱構成了一份詞匯表,幫助開發(fā)者更好的交流。
3. 它們幫助人們更快的理解一個系統(tǒng),只要這個系統(tǒng)是用模式的方式描述的。
4. 它們使系統(tǒng)的重組變得更容易,不管原來的系統(tǒng)是否以模式的方式設計的。

