活用設計樣式(二)

抽象工廠、建構者、工廠方法樣式之應用

作者:謝嘉瑋、吳立仲

指導:趙光正

簡介

有感於大家在學習設計樣式(design pattern)上有相當程度的學習曲線,所以希望能以故事的方式,模擬系統設計階段時所遇到的情境。在撰寫程式與設計架構時,希望藉由這種方式可以達到靈活運用設計樣式的效果。

我們特別在下列的例子中,明顯比較了白箱架構黑箱架構以及介面的使用。我們可以了解到:相同問題其實可以用不同方式解決,針對不同情境找到最適方案。此外,我們可以發現介面在設計樣式上的使用頻率非常高,而且能有效地達到 reuse 的效果。

這裡以製造業為例,分別討論以下幾種樣式:抽象工廠(Abstract Factory)、建構者(Builder)、工廠方法(Factory Method)。

基本結構

在介紹上述三個設計樣式之前,先介紹一些基本名詞:

1. 介面( interface

介面規定了「黑箱式框架」中兩塊分離程式(變動與不變動)之間的溝通方法,我們可以重覆使用介面與不變動的部分,是黑箱式框架的必要結構!

2. 白箱(white box

就是由父類別先寫好範本方法(template method),子類別繼承父類別,由子類別實作掛勾方法(hook method),完成實作目的。因為在撰寫子類別時必須相當了解父類別,所以被稱作白箱。

圖一 白箱式框架。

3. 黑箱(black box

將一個功能或活動分成兩個程式,一個是把功能中共用或是流程的部分抽離出來,另一個則是由功能中比較細節(變動)的部分所構成,並且藉由介面達到分界與溝通。因此,我們可以把完整功能被分散到這兩個程式中,彼此互不干擾,且溝通良好。

在撰寫細節部分時,只要依介面上所規定的溝通方法,「雙方」進行溝通即可,撰寫細節時並不需要了解共用與流程部分,這種特質就是取名為黑箱的原由!

圖二 黑箱式框架(包含介面)。


使用動機與使用情形

在圖三中,我們所使用的分別是生成模式(Creational Patterns中的抽象工廠(Abstract Factory)、建構者(Builder)與工廠方法(Factory Method)三種樣式。

其中以紅色字體標示的部分,代表在設計樣式架構下,實作程式中會保留下來的部分。也就是 reuse 程度較高的部分!

圖三 以製造業為例活用抽象工廠(Abstract Factory)、建構者(Builder)與工廠方法(Factory Method)。

 

以下分別說明這三種樣式的使用動機與使用情形。

抽象工廠(Abstract Factory):

l          使用動機

HP 有外包生產的需求,因此利用招標規格(介面)來選擇符合規格的代工廠,並利用產品規格(介面)來確定實際商品規格。達成外包生產之目標。

l          使用情形

hp 打算銷售 P3 NB 時,決定用委外生產的方式來生產,為了選擇適當的下游代工廠,利用招標規格(例如:具生產 P3 NB,與 PDA 能力)這一個界面選出合於標準的工廠,例如:acer Gvc。並利用 P3 產品規格(P3-M 處理器、128MBintel 830晶片、24X CD-ROM);PDA產品規格(Intel XScale Processor3.5 TFT240x320 的解析度65,536 色)、32 MB Flash ROM64MB RAM、鋰聚合物電池這兩個介面,確定由代工廠所生產的產品符合所需。

l          特點

利用這樣的設計樣式,可以利用 Abstract Factory 這樣的介面,來達成實作,產生同一特質的工廠,達成由別人完成工作的行為。

建構者(Builder):

l          使用動機

acer 管理部為了在眾多自家工廠中,選出具有完整生產 P3-NB PDA 能力者,利用 Builder 這一個介面選出合格者,並依照產品規格生產出合格的機型

l          使用情形

acer 管理部利用 Builder 這一個介面,在眾多工廠中選出具有完整生產 P3-NB 或是 PDA 能力者。當 acer 公司(管理部)準備接下游 hp 所下的訂單時,藉由所列出來的介面(Builder工廠規格(例如:擁有 CD-ROM TFT-LCD、鋁合金機殼、組裝等 生產線 選出旗下工廠(生產部門)中合於資格者。並由管理部門下達指令,要求工廠中每一條生產線中進行各種不同零件的製造,再由組裝線生產出產品。acer 管理部可以因為生產目標不同,介面可以是多個或是一個。

l          特點

利用 builder 這樣型態的樣式,我們可以把真正的生產流程抽離出來跟管理部門分開,達到管理部門與生產部門分離的效果(廠辦分離),並符合生產目標。這樣的黑箱結構使得程式的再使用率提高,而又能達到生產程序靈活變化的效果。

工廠方法(Factory Method):

l          使用動機

Gvc 一廠與二廠都合於 HP 的招標規格,但是為了達成生產目標,他們共同繼承一份相同的生產流程,利用這樣的方式完成生產。

l          使用情形

Gvc 一廠及二廠都是屬於廠辦合一的型式,因為都繼承一份相同的生產流程(生產 P-3 NB PDA 之流程與生產線設計藍圖),在依照自身情況對這樣的流程加以調整,並依照其中的設計藍圖完成生產線。生產出合於產品規格的機型Gvc700 PDA400

l          特點

Factory Method 是屬於白箱結構,我們必須了解框架中的程式碼,才有可能撰寫子類別,利用這樣的繼承特質,對程式碼進行調整後,達成目的。