背景
html
不少時候咱們不知道客戶具體須要執行哪一種類型的操做,可是客戶會給出咱們對應的提示信息,那麼咱們的程序必須可以根據參數信息進行動態操做,這樣的程序纔是一個可擴展的程序。簡單工廠模式應該是咱們最多見的一種設計模式之一,他就是根據客戶的意圖選擇對應的執行類型進行操做,實際上就是根據不一樣的參數實例化出不一樣的對象,因此叫作工廠。設計模式
根據參數的不一樣實例化出對應的類型對象,對於那些須要大量 生成相同父類實例的程序,他能夠避免了代碼的重複。框架
生活到處是例子工具
曾經寫過一個工具類,關於使用iReport生成html、excel、pdf、doc的報表的SDK,客戶只須要傳入數據和想要的報表類型,我就能夠爲他生成對應的類型的數據報表。這就是一個典型的簡單工廠模式,一個工廠類 ReportFactory,一個總接口,IExport,聲明導出方法export,而後,分別實現報表類型的導出方法。spa
我的以爲這個模式,最大的優勢就是避免了代碼重複,其次,邏輯上比較清晰。其餘的優勢估計都是缺點了吧,最大的缺點就是:違背了開放封閉原則,當你想要擴展一種類型的時候,不得不修改工廠類的工廠方法。設計
暫時尚未深究其餘的工廠模式(工廠方法模式、抽象工廠模式),因此,也沒什麼好計較的。excel
另外,模式的改進的都是在ExportFactory的getExport實例方法中進行作手腳,好比把getExport方法變爲靜態的,那麼就是一個靜態工廠模式,爲了不的簡單工廠模式違背開放封閉原則採用反射,實現動態獲取類的實例等。htm