摘要
本文michae
lduel
l著,為wu
譯,出自《非程式設計師》
軟體設計模式**於
christopher alexander
的建築學模式和物件運動。根據
alexander
的觀點,模式就是乙個
對於特定的系統的通用解決方案本身的重複。物件運動關注於將現實世界模化為軟體內部的關係。基於這
兩個原因
,軟體設計模式對於真實世界的物體而言同樣應當是可以重複的。這篇文章呈現了現實的世界中的非軟
件的模式例項
,這些模式**
於《設計
模式—可
復用面向對
象軟體的基
礎》(design patterns - elements of reusable object-orientedsoftware
)[13]一書
。這篇文章也舉例討論了模式語言對非軟體的表現力和設計模式的練習。
簡介
在軟體行業中,模式支持者的團體正在擴大。模式發展的起源可以在建築師
christopher alexander
的著作中
找到,他認為模式是世界上特定系統的通用解決方案。他描述的模式可以在日常的建築物中觀察到。
《模式語言》(a
patternlanguage)[2
]中的每個模式都包含了一張該模式原始範例的。
雖然物質是主流世界的觀點,而模式為軟體世界所信奉,模式也有其體現事物發展的根源
[9]。不幸的是軟體
設計模式的例子不象
alexander
模式那麼豐富,因為軟體設計表現的是精緻的構思而不是那些最初產生的想法
[13]
。當今大多數軟體的專有性限制了我們接觸一流設計的機會。
根據alexander
的說法,現實世界中模式總是重複自己,因為在乙個特定的環境下,它們總是很好地適應現
有的環境因素
[1]。在軟體中,要麼現實世界的問題被完全地模式化,要麼現實世界的物體被轉換成為硬體和軟體,
用來產生現實世界的結果
[5]。既然軟體設計模式根源於
alexander
的樣式和物件,那麼在現實世界中找到軟體設
計模式也是很正常的。這並不是說軟體設計模式是現實世界事物的必然模型,而是說在契合的物件之間相
互影響的
關係可以在「現實世界」和軟體物件中同樣地觀察到。為了驗證這個假設,我們將為每一種設計模式找
出乙個現實世界的例子來
。這些例子在下面的第二節至第四節列出。
建立型模式--與物件的建立有關
作 者(指《設計模式》的作者—譯註,下同)總結了五種建立型模式。建立型模式的例子可以在制
造業,快
餐,生物和行政機構中找到。
抽象工廠(abstract factory)舉例 抽
象工廠的目的是要提供乙個建立一系列相關或相互依賴物件的介面,而不需要指定它們具體的類
。這種模
式可以在日本汽車製造廠所使用的金屬沖壓裝置中找到。這種沖壓裝置可以製造汽車車身部件。同樣的機
械用於衝
壓不同的車型的右邊車門、左邊車門、右前擋泥板、左前擋泥板和引擎罩等等。通過使用轉輪來改變衝
壓盤,這個機械產生的具體類可以在三分鐘內改變
圖1:抽象工廠的沖壓例子
工廠方法(factorymethod)舉例
工廠方法
定義乙個用於建立物件的介面,但是讓子類決
定例項化哪個類。壓注成型演
示了這種模式
。塑料玩
具製造商加工塑料粉,將塑料注
入到希望形狀的模具中
[15]。玩
具的類別(車,人物等等)是由模具決定的。(有關抽象工廠與工廠方法我的那篇
headfirst採訪「工廠方法」和「抽象工廠」
也有些資訊可參考)
圖2:使用注入成型為例子的工廠方法的物件圖
生成器(builder)舉例
生成器模式將複雜物件的構建與物件的表現分離開來,這樣使得同樣的構建過程可以建立出不同的
表現。這
種模式用於快餐店製作兒童餐。典型的兒童餐包括乙個主食,乙個輔食,一杯飲料和乙個玩具(例如漢堡、炸雞、
可樂和玩具車)。這些在不同的兒童餐中可以是不同的,但是組合成兒童餐的過程是相同的。無論顧客點的是漢堡,
三名治還是雞肉,過程都是一樣的。櫃檯的員工直接把主食,輔食和玩具放在一起。這些是放在乙個袋子中的。
飲料被倒入杯中,放在袋子外邊
。這些過程在相互競爭的餐館中是同樣的。
圖3:使用兒童餐作為例子的生成器模式的物件作用表
原型(prototype)舉例
原型模式使用原型例項指定建立物件的種類。新產品的原型通常是先於全部產品建立的,這樣的原
型是被動
的,並不參與複製它自己。乙個細胞的有絲**,產生兩個同樣的細胞,是乙個扮演主動角色複製自己原
型的例子,這演示了原型模式
。乙個細胞**,產生兩個同樣基因型的細胞。換句話說,細胞轉殖了自己。
圖4:使用細胞**例子的原型模式物件圖
單例(singleton)舉例
單例模式確保乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。 單例模式是模仿單集命名的
,單集的
定義是每個集合僅含有乙個元素。美國**的職位是單例,美國憲法規定了**的選舉,任期以及繼任的順序。
這樣,在任何時刻只能由乙個現任的**。無論現任**的身份為何,其頭銜「美利堅美利堅合眾國**
」是訪 問這個職位的人的乙個全域性的訪問點。
圖5:使用**例子的單例模式物件圖
軟體設計模式的非軟體例子(一)
摘要 本文michae lduel l著,為wu 譯,出自 非程式設計師 軟體設計模式 於 christopher alexander 的建築學模式和物件運動 根據alexander 的觀點,模式就是乙個 對於特定的系統的通用解決方案本身的重複 物件運動關注於將現實世界模化為軟體內部的關係。基於這 ...
軟體設計模式
軟體設計模式是軟體設計經驗的總結,是對軟體設計中反覆出現的設計問題的成功解決方案的描述。四元素 名稱 問題 解決方案 效果 1 重用設計,重用設計比重用 更有意義,它會自動帶來 的重用 2 為設計提供公用的詞彙,每個模式名就是乙個設計詞彙,其概念使得程式設計師間交流更方便 3 在開發文件中採用模式詞...
軟體設計模式
建立型設計模式 類模式 物件模式 靜態工廠方法模式 static factory 工廠方法 factory method 抽象工廠 abstract factory 單例模式 singleton 原型模式 prototype 建造模式 builder 介面卡模式 adapter 介面卡模式 adap...