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