所謂的工廠(Factory)是指用來建立物件或產生實例的類別;

也就是說一個專門用來建立物件的類別就叫做工廠類別(Factory Class)。

工廠模式的主要概念為封裝物件建構的邏輯,也就是不要讓客戶端直接以new的方式建立物件,

而是把建立物件的邏輯抽取出來放在工廠類別。

 

我們先談談簡單工廠 (Simple Factory Method)

又稱靜態工廠方法模式,他定義一個具體的工廠類別負責創建(new)一些類別(Class)的實例(instance)

看個例子吧

假設我們有一個Phone 抽象類別 ,定義了打電話的功能

1  

接著我們建立兩個class分別為HTC 和 iphone 實作phone裡面打電話的功能

2  

3  

接著我們就建立我們製造手機的工廠

4  

接著我們就來做一個測試,使用PhoneFactory幫我們製造2支手機分別為htc 和 iphone

接著測試他們打電話的功能

5  

OK,我們完成了簡單工廠了

各位有看出來簡單工廠的優點和缺點嗎?

優點顧名思義"簡單工廠方法"就是簡單也很直覺

但是最大的缺點就是違反了物件導向設計原則之一的Open-Closed Principle(OCP)

甚麼是OCP? 簡單來說就是我們希望能夠不修改既有程式碼的情況下,容易擴充程式功能

那在我們這個範例當中,如果我們今天要加入小米手機這個品牌,那我們在PhoneFactory就必須多一個if的判斷式

這裡就違反了OCP了

 

所以接著我們就要來談工廠模式了

Factory.png

▲這邊簡單提供一個Factory的Class diagram

一樣,我們從看例子開始

我們沿用上個例子的Phone,Htc,Iphone三個類別

現在創建一個介面(interface)叫做Factory

7  

接著我們建立2個class分別為HtcFactory,IphoneFactory

也就是說,自己的手機自己做(Htc公司自己生產Htc,apple公司自己生產iphone...)

8  

9  

接著我們進行測試

10  

工廠方法模式最大的優點就是改善了簡單工廠難以擴充的缺點

也就是解決了違反OCP

我們若要在增加小米手機,只需要在創建一個class實作Phone即可

以及新增一個小米的Factory來幫我們建立小米手機

而不會修改到既有程式碼

但是缺點就是需要額外寫程式,增加新的class,class會越來越多

arrow
arrow
    創作者介紹
    創作者 Mark Zhang 的頭像
    Mark Zhang

    讀處

    Mark Zhang 發表在 痞客邦 留言(0) 人氣()