轉(zhuǎn)載請保留出處,尊重他人勞動。
引子:
模式的定義,似乎都如出一轍但又似乎都略有不同,這些由于關(guān)注點的不同導(dǎo)致的不同點讓事情變得有點復(fù)雜了。
簡史:
何謂設(shè)計模式?任何一本講解軟件設(shè)計模式的書籍都會首先問出這個問題。而大部分又都會給出一個(或若干個)傳說中軟件設(shè)計模式起源的定義:
“每個模式就是一條由三部分組成的規(guī)則,它表示了一個特定環(huán)境、一個問題和一個解決方案之間的關(guān)系。
…
簡單地說,模式是一個出現(xiàn)在世界上的實物,同時也是一條規(guī)則,告訴你應(yīng)該如何創(chuàng)建一個實物、應(yīng)該在何時創(chuàng)建。它既是過程,也是實物;既是對當(dāng)前實物的描述,也是對創(chuàng)建實物的過程的描述。” ——《建筑的永恒之道》
“對于反復(fù)出現(xiàn)設(shè)計問題的抽象解決方案” ——《建筑模式語言》
之后,這些概念在不同的軟件設(shè)計模式的書籍中不斷被本地化:
在Gof(Gang of four)的《Design Pattern》中模式被定義成三段值: 模式就是表示特定情境、問題、與方案之間的關(guān)系。
在《J2EE core Patterns》一書種的定義:模式是用來描述所交流的問題及其解決方案。
《面向模式的軟件體系結(jié)構(gòu)》的結(jié)論:一個軟件體系結(jié)構(gòu)的模式描述了一個出現(xiàn)特定設(shè)計語境中的特殊的再現(xiàn)設(shè)計問題,并為她的解決方案提供了一個經(jīng)過充分驗證的通用圖式。解決方案圖式通過描述其組成組件、他們的責(zé)任和相互關(guān)系以及它們的協(xié)作方式來具體指定。
當(dāng)然在一些其他書籍中也有相關(guān)論述:模式就是“范例”;就是同時考慮一對問題,求解方案的“專家行為”等等……
觀點:
這些觀點和概念,似乎都如出一轍但又似乎都略有不同,這些由于關(guān)注點的不同導(dǎo)致的不同點讓事情變得有點復(fù)雜了。我在瀏覽這些書籍的時候,一直在想是不是應(yīng)該自己歸納一下自己的理解呢?OK,讓我自己動手做做看。
定義:
廣義上講:模式就是一個環(huán)境中,一個反復(fù)出現(xiàn)的典型問題與這個問題的以經(jīng)過論證的解決方案,以及它們?nèi)呔o密關(guān)系的整體的抽象描述。
為了便于記憶,用序列可以表示為:
環(huán)境:出現(xiàn)問題以及其解決方案的場景。
問題:環(huán)境中可以被一個解決方案覆蓋的一個反復(fù)出現(xiàn)的典型問題。
解決方案:已經(jīng)被證實可以在語境中解決一個典型問題的策略與方法。
關(guān)系:以上已經(jīng)提到的三點的緊密地關(guān)聯(lián)性。
模式:以上四點的整體的抽象描述。
這樣軟件設(shè)計模式應(yīng)該就已經(jīng)一目了然了:
軟件設(shè)計模式就是指:在軟件領(lǐng)域這個大環(huán)境下的解決軟件設(shè)計問題的模式(廣義模式)。
為了便于記憶,用序列可以表示為:
環(huán)境具化:軟件設(shè)計領(lǐng)域
問題具化:軟件設(shè)計的問題
軟件設(shè)計模式:有以上兩點具化的模式(廣義模式)。
Haha 現(xiàn)在這樣的定義描述就比較清晰了。
特點:
在前面的定義中已經(jīng)能夠看到許多模式的特性了,比如:整體的抽象性,問題的反復(fù)性,解決方案的以論證性,關(guān)系的緊密性等等。其實,模式還有若干隱含的特性。
歸納性:模式其實是對經(jīng)過充分考驗的經(jīng)驗,是提煉過后的一種可復(fù)用的知識。它與經(jīng)驗論、循證主義、同屬于人類最基本的認知手段歸納法的產(chǎn)物。
動、靜性:模式本身既描述一個抽象后的物件,也描述一個抽象過程。
與定義一樣軟件設(shè)計模式同樣繼承了這些特性。
寒一下你的“杜撰”。如果文章是“杜撰”,隨筆就是“謠言”了。呵呵。