李 莉 楊 名
(武漢工商學(xué)院,湖北 武漢 430065)
《軟件設(shè)計模式》是一門具有較強理論性和實踐性的軟件設(shè)計和開發(fā)類課程。既有理論又有實踐,教學(xué)難度比較都比較大。如果能從生活中的場景進行比擬和解說,無疑能更好地幫助學(xué)生加速理解,加深印象,起到事半功倍的效果。
程序本身就是對生活場景的虛擬和抽象,每一種模式我都能在生活中找到它的影子。比如,說到狀態(tài)模式,我能想到水有固、液、氣三種狀態(tài),而人也有少、壯、老三個階段;提起中介模式,我能立刻想到房產(chǎn)中介;看到裝飾模式,我能聯(lián)想到人的穿衣搭配……
本課程結(jié)合日常生活中的案例來詮釋各種設(shè)計模式,以生活中的小故事開始,用風(fēng)趣的方式,由淺入深地講述每一種模式,使教學(xué)成為有趣的探討,可以改進專業(yè)課程的教學(xué)效果。
水是世界上最奇特的物質(zhì)之一,不僅滋潤萬物,更是變化萬千!你很難想象冰、水、水蒸氣其實是同一個東西H2O,看到冰你可能會聯(lián)想到玻璃,看到水你可能會聯(lián)想到牛奶,看到水蒸氣你可能會聯(lián)想到空氣。那么如何用程序來模擬水的三種不同狀態(tài)及相互轉(zhuǎn)化呢?
我們從對象的角度來考慮會有哪個類,首先不管它是什么狀態(tài),對象始終是水(H2O),所以會有一個Water類;而它又有三種狀態(tài),我們可以定義三個狀態(tài)類:SolidState、LiquidState、GaseousState;從SolidState、LiquidState、GaseousState這三個單詞中我們會發(fā)現(xiàn)都有一個State后綴,于是我們會想它們之間是否有一些共性,能否提取出一個更抽象的類,這個類就是狀態(tài)類(State)。這些類之間的關(guān)系可用圖表示,如圖1所示。
圖1 水的三態(tài)相關(guān)類之間的關(guān)系
2.2.2 引出狀態(tài)模式設(shè)計思想
從示例中我們知道,水的三種不同的狀態(tài)有著完全不一樣的外在特性:冰,質(zhì)堅硬,無流動性,表面光滑;水,具有流動性;水蒸氣,質(zhì)輕,肉眼看不見,卻存在于空氣中。這三種狀態(tài)的特性是不是相差巨大?簡直就不像是同一種東西,但事實卻是不管它在什么狀態(tài),其內(nèi)部組成都是一樣的,都是水分子(H2O)。
狀態(tài)模式的核心思想就是一個事物(對象)有多種狀態(tài),在不同的狀態(tài)下所表現(xiàn)出來的行為和屬性不一樣。
2.2.3 狀態(tài)模式的應(yīng)用場景
1)一個對象的行為取決于它的狀態(tài),并且它在運行時可能經(jīng)常改變它的狀態(tài),從而改變它的行為。
2)一個操作中含有龐大的多分支的條件語句,這些分支依賴于該對象的狀態(tài),且每一個分支的業(yè)務(wù)邏輯都非常復(fù)雜時,我們可以使用狀態(tài)模式來拆分不同的分支邏輯,使程序有更好的可讀性和可維 護性。
作為新時代的青年,楊再興之光耀及的后人,我想我是有責(zé)任的,有責(zé)任去吸引社會對小商橋的關(guān)注,讓更多人望見漸行漸遠的英烈之光;有責(zé)任引導(dǎo)人們掙脫名韁利鎖,將目光投向小商橋的歷史精神和文化。雖然力量很弱小,但至少我可以通過一篇文章,讓小商橋的歷史更明朗,讓小商橋的文明之光照亮傳統(tǒng)文化的復(fù)興之路。
2.2.1 生活中的迭代模式
以醫(yī)院看牙為例,掛號時能看到自己是幾號,再到對應(yīng)科室排隊,叫號機上會根據(jù)序號依次叫號,每一個診室的醫(yī)生診斷完一個病人之后,會呼叫下一位病人,這時外面的顯示屏和語音系統(tǒng)自動播報下一位病人的名字。
2.2.2 引出迭代模式設(shè)計思想
醫(yī)院的排號系統(tǒng)就像病人隊伍的大管家,通過數(shù)字化的方式精確地維護著先來先就診的秩序。醫(yī)生不用在乎外面有多少人在等待,更不需要了解每一個人的名字和具體信息。他只要在診斷完一個病人后按一下按鈕,排號系統(tǒng)就會自動為他呼叫下一位病人,這樣醫(yī)生就可專注于病情的診斷!這個排號系統(tǒng)就如同程序設(shè)計中的迭代模式 。
提供一種方法順序地訪問一組聚合對象(一個容器)中的各個元素,而又不需要暴露該對象的內(nèi)部細節(jié)。
2.3.1 生活中的中介模式
不得不說,租房子是一件煩心而累人的事情!首先,要清楚自己要怎樣的房子;然后,要去網(wǎng)上查找房源信息;之后,還要電話咨詢,過濾虛假信息和過時信息;接著,還要實地考察,這一步你可能會從東城穿越到西城;最后,還要與各種脾性的房東周旋,討價 還價。
如果找一家正規(guī)點的中介公司,告訴中介對房子的具體要求,中介就會篩選出符合你要求的房源,幫你快速租到適合的房子
2.3.2 引出中介模式設(shè)計思想
在上面的生活場景中,因為找房子的過程實在太煩瑣了,而且對房源信息也不了解。通過中介,省去了很多麻煩的細節(jié),合同也是直接跟中介簽的,甚至都不知道房東是誰!
不需要與房東進行直接交涉,只需要與中介進行交涉即可,一切都可通過中介完成。這使得他找房子的過程,由如圖2所示的狀態(tài)變成了如圖3所示的狀態(tài),這無疑為他減少了不少麻煩。
圖2 沒有中介的找房過程
圖3 有中介的找房過程
2.3.3 中介模式應(yīng)用場景
1)一組對象以定義良好但復(fù)雜的方式進行通信。產(chǎn)生的相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解。
2)一個對象引用其他很多對象并且直接與這些對象通信,導(dǎo)致難以復(fù)用該對象。
3)想通過一個中間類來封裝多個類中的行為,同時又不想生成太多的子類。
本文列舉了三種設(shè)計模式進行了闡述,其他的設(shè)計模式也可以在生活化的案例進行類比。
努力發(fā)掘日常生活中能夠映射到設(shè)計模式的場景,可以提高學(xué)習(xí)《軟件設(shè)計模式》課程學(xué)習(xí)的興趣,使學(xué)習(xí)者受益,力圖追求教學(xué)生動有趣,探索出教師快樂教學(xué),學(xué)生快樂學(xué)習(xí)的教學(xué)狀態(tài)。