第一章 引言
第一節 論模式
“簡單地說,模式是一個出現在世界上的實物,同時也是一條規則,告訴你應該如何創建一個實物、應該在何時創建。它既是過程,也是實物;既是對當前實物的描述,也是對創建實物的過程的描述!
——《建筑的永恒之道》
在軟件科學中,隨著理論的發展,模式被細分為好多種,有軟件的管理模式,實踐證明與傳統管理是有區別的,從而是一種新的模式。有軟件分析模式,有軟件設計模式,過程模式,有軟件重構模式等等。其中設計模式是最核心、最重要的模式。在通常的理論書籍中,一般把設計模式就簡稱為模式了。下文中可以通過上下文環境知道模式做設計模式解或是通用的模式。
那么,在軟件科學中,模式到底是什么呢,能完全借用C.Alexander定義的模式嗎?有人說軟件跟建筑天生相像,你瞧 Architecture,身兼數重意思。其實GOF書中已經有說明:本質上一樣。但是具體到軟件領域又有所不同?上У氖怯捎谲浖J嚼碚撘恢痹诎l展中,公認的定義到目前為止還沒有。但是確有幾種經典的說法。有說,模式就是情境中一個問題經過證實地一個方案.這種定義比較簡單,簡潔明了。在Gof(Gang of four)的書中模式被定義成三段值:表示特定情境、問題、與方案之間的關系。并按照這樣的方式描述介紹了著名的23種模式(c++語言描述)。在《J2EE core Patterns》一書種作者也作了類似的定義:模式是用來描述所交流的問題及其解決方案。并用類似于GOF書中的介紹步驟解析了15個J2EE模式。其他介紹模式的書籍、論文與網站也有自己的模式定義。但都推崇GOF書中的定義,并一般以其為藍本對比介紹。
第二節 窮追模式的本原
軟件中的模式起源于建筑,但是正如Gang of Four在《設計模式》中所說:盡管Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向對象設計模式。只是在面向對象的解決方案里,我們用對象和接口代替了墻壁和門窗。兩者的核心都在于提供了相關問題的解決方案。
實際上我們生活在一個充滿模式的世界里——當然,簡單的而肯定的前提是我們的世界是有秩序的,F代的人除了瘋子和變態,幾乎都穿有衣服;大部分人都是一天吃三頓飯,當然也有一天吃兩頓的;社會中,我們屬于某個社區或團體,參與政治、經濟活動;在我們參與的所有活動中,我們都按照一定的規則行事;在規則邊緣的人們又總是希望加入規則使用者的行列,就像我們中國先前和俄羅斯現在一直堅持要求加入世界貿易組織一樣。吃飯、穿衣、睡覺是我們人類基本的生活要求;我們每一個人都必須遵守,一個人如果不穿衣、不吃飯,那沒有其他結論,他根本就不屬于人類。參與社區,在一定的框架下進行社會經濟活動則是人類得以日益發展的內在要求。
其實在中國傳統里頭更是講究模式,比如京劇,一招一式都有套路;再如中國國畫格式講究套路,樹該怎么畫,有幾種畫法;又如《孫子兵法》——它可以說已經成為用在各方面“戰爭”的通用模式了,他告訴你在什么軍事環境中采取什么陣法,然而怎么去拼打就靠自己的理解和靈活應用了。因而,創建模式的是大師級別的人物,拘泥于這些模式的人卻只能叫做工匠。當然對于無所謂模式者,要么已經融會貫通,要么就是無知,他們應該首先成為的是工匠。就像我們中國,現階段,就是在積極參與國際社會與經濟活動規則的制定,用中華民族的傳統美德和智慧重塑具有中華民族特色的國際、國內社會經濟交往方式,再造有利于全體人類可持續發展的社會經濟活動規則。
可見模式是無所不在的,生活中模式是習慣的養成。文化中模式是歷史的積淀。學習中模式是經驗的升華。軟件科學中模式就是人們對實踐的提煉、是實用性與理論性的統一。
第三節 學習和研究設計模式
1、為什么學習和研究設計模式
那么我們在軟件中為什么要學習模式?模式到底給我們帶來了什么好處而使得如此多人對它熱衷?其實道理是一樣的——我們都需要借鑒大師的經驗,站在巨人的肩膀上才能夠更好的前行。尤其在工科領域,這點顯的更是重要。其次,學習模式能讓我們學習和開發軟件時少走彎路,使得我們的學習從一開始就是嚴密的。開發出來的軟件也能更加scalable和reusable,從而可以提供更強的可維護性、更短的開發生命周期。知道模式,研究模式還可以讓我們開發軟件更流暢、更模塊化,減少耦合。用一個術語說就是減少內應力,合理疏解軟件的內應力可以使得軟件系統長存。如建筑結構中分解壓力一般,如果結構不合理,壓力分解不均,建筑很可能很快就或漏或塌。要使得新建筑、新軟件在一定時期內不漏不塌是我們要學習模式的基本原因;能夠使得我們的建筑、軟件長久甚至永存,正是模式如此吸引我們的魅力所在。
文章來源于領測軟件測試網 http://www.kjueaiud.com/