李胤融
摘要:在計(jì)算機(jī)軟件快速發(fā)展的今天,軟件設(shè)計(jì)模式在計(jì)算機(jī)程序設(shè)計(jì)的運(yùn)用中越來越重要。軟件設(shè)計(jì)模式按其完成工作的種類可分為了創(chuàng)建型的模式、結(jié)構(gòu)型的模式以及行為型的模式。在實(shí)際應(yīng)用中根據(jù)分析研究問題的結(jié)果選擇和使用合適的軟件設(shè)計(jì)模式。
關(guān)鍵詞:軟件設(shè)計(jì)設(shè)計(jì)模式新探索
關(guān)于模式這個(gè)概念,最早的時(shí)候是在城市建筑領(lǐng)域當(dāng)中出現(xiàn)的,而ChristopherAlexander所寫的本關(guān)于建筑的書中對(duì)模式這概念有明確的定義,其大概含義是說每個(gè)模式都是描述我們周圍發(fā)生的事情,并對(duì)發(fā)生的問題進(jìn)行合理的解釋,使得利用這個(gè)模式就可以重復(fù)的解決類似的問題。Christopher Alexander利用他所得出的模式這個(gè)概念解決了建筑領(lǐng)域中的些問題,模式這概念發(fā)展到現(xiàn)在,已經(jīng)逐漸成為計(jì)算機(jī)領(lǐng)域當(dāng)中獨(dú)有的概念了。
一、現(xiàn)階段軟件設(shè)計(jì)模式的分析
對(duì)軟件設(shè)計(jì)模式的分類有許多不同的方法,在這里主要是根據(jù)模式在計(jì)算機(jī)軟件設(shè)計(jì)中能夠完成何種種類的工作來決定的,大致可以分為創(chuàng)建型的模式、結(jié)構(gòu)型的模式以及行為型的模式這三種類型。而當(dāng)模式運(yùn)用于不同因素的時(shí)候又可以分為不同的類型,運(yùn)用于類的時(shí)候可以分為類模式,運(yùn)用于對(duì)象的時(shí)候可以分為對(duì)象模式。所謂類模式就是處理系統(tǒng)中的類與子類之間關(guān)系的模式,這些關(guān)系可以通過繼承的形式來建立,靜態(tài)的類模式在進(jìn)行編譯的時(shí)候便要確定下來;所謂對(duì)象模式,就是處理對(duì)象之間關(guān)系的模式,這些關(guān)系在系統(tǒng)運(yùn)行的時(shí)候是能夠不斷變化的,所以對(duì)象模式是動(dòng)態(tài)的模式。
(一)創(chuàng)建型的軟件設(shè)計(jì)模式。創(chuàng)建型的設(shè)計(jì)模式是和對(duì)象的創(chuàng)建有著十分必然的關(guān)系,也就是說,在描述創(chuàng)建對(duì)象的時(shí)候,要將對(duì)象創(chuàng)建過程的具體細(xì)節(jié)進(jìn)行隱藏設(shè)計(jì),使得系統(tǒng)程序代碼能夠不依賴具體的對(duì)象。所以當(dāng)我們需要在系統(tǒng)中增加個(gè)新的對(duì)象的時(shí)候,是不需要修改系統(tǒng)的源代碼的。創(chuàng)建型的類模式需要將對(duì)象當(dāng)中的部分在子類當(dāng)中進(jìn)行延遲性的創(chuàng)建工作,而創(chuàng)建型的對(duì)象模式則是將對(duì)象的部分在另一個(gè)對(duì)象中進(jìn)行延遲性的創(chuàng)建。
(二)結(jié)構(gòu)型的軟件設(shè)計(jì)模式。結(jié)構(gòu)型的軟件設(shè)計(jì)模式是處理類的和處理對(duì)象的設(shè)計(jì)模式的組合形式,也就是能夠描述類與對(duì)象之問的大的結(jié)構(gòu)如何組建起來,并且在組建之后還能夠擁有新的功能的種模式。結(jié)構(gòu)型的類模式是采用繼承性的機(jī)制來對(duì)類進(jìn)行組合。而結(jié)構(gòu)型的對(duì)象模式則是能夠描述對(duì)象之間的組裝方式。
(三)行為型的軟件設(shè)計(jì)模式。所謂行為型的軟件設(shè)計(jì)模式所描述的是算法和對(duì)象之間所擁有的任務(wù)或者職責(zé)的分配情況,這其中不僅包括所需要的類或者對(duì)象需要的設(shè)計(jì)模式,還包括類和對(duì)象之間需要的通訊模式。這些模式的存在使得系統(tǒng)運(yùn)行過程中難以追蹤的十分復(fù)雜的控制流得到了良好的刻畫。行為型的軟件設(shè)計(jì)模式是使用繼承機(jī)制來對(duì)類進(jìn)行必要的分配工作,而在使用對(duì)象的時(shí)候是使用對(duì)象的復(fù)合而并非繼承,所要描述的是組對(duì)象是如何在合作的情況下完成單獨(dú)的對(duì)象無法獨(dú)自完成的任務(wù)。
二、軟件設(shè)計(jì)模式的選擇和應(yīng)用
通過上面介紹的面向?qū)ο蟮能浖O(shè)計(jì)模式,我們了解到軟件設(shè)計(jì)模式的存在能夠極大限度的幫助設(shè)計(jì)者用最快最好的方式來完成相關(guān)的軟件程序設(shè)計(jì)。而面對(duì)特殊的問題的時(shí)候,在已有的軟件設(shè)計(jì)模式中也可以十分方便的找到合適的軟件模式進(jìn)行相關(guān)的程序設(shè)計(jì),尤其是在面對(duì)軟件設(shè)計(jì)人員還不熟悉的新問題的時(shí)候。
在對(duì)軟件設(shè)計(jì)模式進(jìn)行選擇的時(shí)候,應(yīng)該先理解問題所表現(xiàn)出來的需求,問題中所表現(xiàn)出來的任何需求都能夠在個(gè)或者幾個(gè)的問題領(lǐng)域中找到類似的地方,這種理解問題的需求再在不斷的尋找過程中找到可能需要的軟件設(shè)計(jì)模式或者軟件設(shè)計(jì)模式組的過程,對(duì)有效的選擇軟件設(shè)計(jì)模式從而完成軟件設(shè)計(jì)有著十分重要的作用;在了解了問題的需要并選擇了大概的軟件設(shè)計(jì)模式范圍之后,再就問題所表現(xiàn)出來的需求對(duì)軟件設(shè)計(jì)模式進(jìn)行最終的選擇,并在選擇的過程中不斷了解這種軟件設(shè)計(jì)模式是如何解決這類型的問題的。每類軟件設(shè)計(jì)模式都能夠解決類軟件設(shè)計(jì)方面的問題,每個(gè)模式的存在都有其含義,對(duì)需要的軟件設(shè)計(jì)模式進(jìn)行必要的了解,才能夠選擇最適合解決問題的軟件設(shè)計(jì)模式或者軟件設(shè)計(jì)模式組。與此同時(shí),軟件設(shè)計(jì)模式有許多都是能夠相互補(bǔ)充的,所以在選擇合適的軟件設(shè)計(jì)模式的時(shí)候,應(yīng)該就設(shè)計(jì)模式之問的聯(lián)系要進(jìn)行必要的研究,這對(duì)選擇出適合的軟件設(shè)計(jì)模式組有著十分重要的指導(dǎo)意義。尤其是在對(duì)個(gè)實(shí)際存在的問題進(jìn)行程序設(shè)計(jì)的時(shí)候,更加應(yīng)該著重考慮可能影響到軟件設(shè)計(jì)的因素,研究這些因素是否會(huì)對(duì)系統(tǒng)產(chǎn)生不良影響。
在選擇了合適的軟件設(shè)計(jì)模式之后,就要把軟件設(shè)計(jì)模式合理的運(yùn)用到系統(tǒng)的設(shè)計(jì)當(dāng)中,這需要循序漸進(jìn)的進(jìn)行。是必須理解所選擇出來的軟件設(shè)計(jì)模式,能夠清楚的了解軟件設(shè)計(jì)模式最合適的使用環(huán)境以及在使用之后所能夠達(dá)到的效果,并且對(duì)其是否能夠解決實(shí)際存在的問題進(jìn)行合理的判斷;二是研究模式的結(jié)構(gòu)、不同部位之間的關(guān)系和它們是如何進(jìn)行合作的;三是就模式的參與者名字進(jìn)行選擇;四是對(duì)類進(jìn)行定義、聲明類之間的接口,建立不同類之間的關(guān)系,對(duì)代表的數(shù)據(jù)以及對(duì)象所引用的實(shí)例變量進(jìn)行定義;六是對(duì)模式中專門用來應(yīng)用的操作名字進(jìn)行定義;最后就是實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)中執(zhí)行模式所包含的設(shè)計(jì)。
三、結(jié)語
總之,模式這個(gè)概念在很早的時(shí)候就已經(jīng)存在了,并且有很多的模式在現(xiàn)有的軟件系統(tǒng)設(shè)計(jì)中都已經(jīng)出現(xiàn)過了。在國外,對(duì)設(shè)計(jì)模式的研究工作進(jìn)展十分迅速,他們總是能夠不斷的總結(jié)出新的軟件設(shè)計(jì)模式,而且很多的軟件設(shè)計(jì)開發(fā)工具與環(huán)境都對(duì)他們的開發(fā)工作進(jìn)行了必要的支持,有些軟件設(shè)計(jì)模式的研究者還能夠讓設(shè)計(jì)模式運(yùn)用形式化的表現(xiàn)模式由計(jì)算機(jī)自動(dòng)生成需要的代碼。所以我們在對(duì)設(shè)計(jì)模式進(jìn)行實(shí)踐的過程中,應(yīng)該不斷的總結(jié)發(fā)展,才能夠早日創(chuàng)造出新的軟件設(shè)計(jì)模式。