所謂的工廠(Factory)是指用來建立物件或產生實例的類別;
也就是說一個專門用來建立物件的類別就叫做工廠類別(Factory Class)。
工廠模式的主要概念為封裝物件建構的邏輯,也就是不要讓客戶端直接以new的方式建立物件,
而是把建立物件的邏輯抽取出來放在工廠類別。
我們先談談簡單工廠 (Simple Factory Method)
又稱靜態工廠方法模式,他定義一個具體的工廠類別負責創建(new)一些類別(Class)的實例(instance)
看個例子吧
假設我們有一個Phone 抽象類別 ,定義了打電話的功能
接著我們建立兩個class分別為HTC 和 iphone 實作phone裡面打電話的功能
接著我們就建立我們製造手機的工廠
接著我們就來做一個測試,使用PhoneFactory幫我們製造2支手機分別為htc 和 iphone
接著測試他們打電話的功能
OK,我們完成了簡單工廠了
各位有看出來簡單工廠的優點和缺點嗎?
優點顧名思義"簡單工廠方法"就是簡單也很直覺
但是最大的缺點就是違反了物件導向設計原則之一的Open-Closed Principle(OCP)
甚麼是OCP? 簡單來說就是我們希望能夠不修改既有程式碼的情況下,容易擴充程式功能
那在我們這個範例當中,如果我們今天要加入小米手機這個品牌,那我們在PhoneFactory就必須多一個if的判斷式
這裡就違反了OCP了
所以接著我們就要來談工廠模式了
▲這邊簡單提供一個Factory的Class diagram
一樣,我們從看例子開始
我們沿用上個例子的Phone,Htc,Iphone三個類別
現在創建一個介面(interface)叫做Factory
接著我們建立2個class分別為HtcFactory,IphoneFactory
也就是說,自己的手機自己做(Htc公司自己生產Htc,apple公司自己生產iphone...)
接著我們進行測試
工廠方法模式最大的優點就是改善了簡單工廠難以擴充的缺點
也就是解決了違反OCP
我們若要在增加小米手機,只需要在創建一個class實作Phone即可
以及新增一個小米的Factory來幫我們建立小米手機
而不會修改到既有程式碼
但是缺點就是需要額外寫程式,增加新的class,class會越來越多
留言列表