敏捷思維-架構(gòu)設(shè)計中的方法學(xué)(1)

字號:

軟件設(shè)計模式來源于Christopher Alexander的建筑學(xué)模式和對象運動。根據(jù)Alexander的觀點,模式就是一個對于特定的系統(tǒng)的通用解決方案本身的重復(fù)。對象運動關(guān)注于將現(xiàn)實世界?;癁檐浖?nèi)部的關(guān)系?;谶@兩個原因,軟件設(shè)計模式對于真實世界的物體而言同樣應(yīng)當(dāng)是可以重復(fù)的。這篇文章呈現(xiàn)了現(xiàn)實的世界中的非軟件的模式實例,這些模式來源于《設(shè)計模式-可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(Design Patterns - Elements of Reusable Object-Oriented Software)[13]一書。這篇文章也舉例討論了模式語言對非軟件的表現(xiàn)力和設(shè)計模式的練習(xí)。
    在軟件行業(yè)中,模式支持者的團體正在擴大。模式發(fā)展的起源可以在建筑師Christopher Alexander的著作中找到,他認為模式是世界上特定系統(tǒng)的通用解決方案。他描述的模式可以在日常的建筑物中觀察到。《模式語言》(A Pattern Language)中的每個模式都包含了一張該模式原始范例的圖片。
    雖然物質(zhì)是主流世界的觀點,而模式為軟件世界所信奉,模式也有其體現(xiàn)事物發(fā)展的根源。不幸的是軟件設(shè)計模式的例子不象Alexander模式那么豐富,因為軟件設(shè)計表現(xiàn)的是精致的構(gòu)思而不是那些最初產(chǎn)生的想法。當(dāng)今大多數(shù)軟件的專有性限制了我們接觸一流設(shè)計的機會。
    根據(jù)Alexander的說法,現(xiàn)實世界中模式總是重復(fù)自己,因為在一個特定的環(huán)境下,它們總是很好地適應(yīng)現(xiàn)有的環(huán)境因素。在軟件中,要么現(xiàn)實世界的問題被完全地模式化,要么現(xiàn)實世界的物體被轉(zhuǎn)換成為硬件和軟件,用來產(chǎn)生現(xiàn)實世界的結(jié)果。既然軟件設(shè)計模式根源于Alexander的樣式和對象,那么在現(xiàn)實世界中找到軟件設(shè)計模式也是很正常的。這并不是說軟件設(shè)計模式是現(xiàn)實世界事物的必然模型,而是說在契合的對象之間相互影響的關(guān)系可以在"現(xiàn)實世界"和軟件對象中同樣地觀察到。為了驗證這個假設(shè),我們將為每一種設(shè)計模式找出一個現(xiàn)實世界的例子來。
    創(chuàng)建型模式
    總結(jié)了五種創(chuàng)建型模式。創(chuàng)建型模式的例子可以在制造業(yè),快餐,生物和行政機構(gòu)中找到。
    抽象工廠(Abstract Factory)舉例
    抽象工廠的目的是要提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而不需要指定它們具體的類。這種模式可以在日本汽車制造廠所使用的金屬沖壓設(shè)備中找到。這種沖壓設(shè)備可以制造汽車車身部件。同樣的機械用于沖壓不同的車型的右邊車門、左邊車門、右前擋泥板、左前擋泥板和引擎罩等等。通過使用轉(zhuǎn)輪來改變沖壓盤,這個機械產(chǎn)生的具體類可以在三分鐘內(nèi)改變。
    生成器(Builder)舉例
    生成器模式將復(fù)雜對象的構(gòu)建與對象的表現(xiàn)分離開來,這樣使得同樣的構(gòu)建過程可以創(chuàng)建出不同的表現(xiàn)。這種模式用于快餐店制作兒童餐。典型的兒童餐包括一個主食,一個輔食,一杯飲料和一個玩具(例如漢堡、炸雞、可樂和玩具車)。這些在不同的兒童餐中可以是不同的,但是組合成兒童餐的過程是相同的。無論顧客點的是漢堡,三名治還是雞肉,過程都是一樣的。柜臺的員工直接把主食,輔食和玩具放在一起。這些是放在一個袋子中的。飲料被倒入杯中,放在袋子外邊。這些過程在相互競爭的餐館中是同樣的。