本文由@呆代待殆原創,轉載請註明出處。 工廠模式遵循的設計原則之一:找出代碼中常變化的部分,並把這一部分分離出來。(Dependency Inversion Principle) 工廠模式簡述 當我們需要在我們編寫的代碼裡面實例化(將類實例化,在java中就是用到new的時候)特定的類時,我們的代碼 ...
本文由@呆代待殆原創,轉載請註明出處。
工廠模式遵循的設計原則之一:找出代碼中常變化的部分,並把這一部分分離出來。(Dependency Inversion Principle)
工廠模式簡述
當我們需要在我們編寫的代碼裡面實例化(將類實例化,在java中就是用到new的時候)特定的類時,我們的代碼間的耦合性和維護的難度都會提高,因為我們很可能在將來某個時候為了增加另外的功能而去引入另外一個特定的類或者對現有的這個特定的類進行更改,這時我們就很有可能不得不去修改與之相關的存在依賴關係的其他源代碼來適應這個變化,這樣就嚴重違反了Open-Closed principle(允許擴展而拒絕修改),所以當需要在我們的代碼中引入某些具體實例(concrete class,一個有特定用途且已被完全實現的對象)時,我們一般會使用工廠模式來創建這些實例,工廠模式一般分為工廠方法(Factory Method)和抽象工廠(Abstract Factory),我們一個一個介紹。
工廠模式的作用
在工廠設計模式中,我們一般將產生實例的代碼集中到一個類或者一個方法中,形成一個簡單工廠類或者一個工廠方法,因為混入具體實例的代碼是非常容易變更的,當我們把它們集中起來後,有兩個好處。
1,集中了易改變的代碼,降低了維護代碼的代價。
2,封裝了易改變的代碼,那麼其他的代碼就可以面向這個封裝後的固定的介面編程,而不必面對某個特定的實例,降低了對象間的耦合。
工廠方法的定義與基本結構
定義:定義一個介面或者抽象類,將工廠方法定義為抽象,讓他的子類去決定要實例化的類時哪一個,工廠方法讓實例化推遲到子類。(看一下,有個印象,通過下麵的舉例來理解工廠模式更有效)
一張來自《Head First 設計模式》的結構圖。