簡單工廠事實上不是乙個設計模式,比較像一種程式設計習慣!
首先看一下**,從**中理解這個程式設計習慣。
舉個做披薩的樣例:
pizza類**:
public inte***ce pizza
詳細的披薩cheesepizza:
public class cheesepizza implements pizza
@override
public void box()
@override
public void bake()
@override
public void cut()
}
詳細的披薩clampizza:
public class clampizza implements pizza
@override
public void box()
@override
public void bake()
@override
public void cut()
}
簡單工廠累:
public class ******pizzafactory else if (tpye.equals("clam"))
return pizza;
}}
披薩訂單類pizzastore:
public class pizzastore
protected final pizza orderpizza(string type)
}
測試**:
public static void main(string args)
列印結果:
cheesepizza:pripare()
cheesepizza:bake()
cheesepizza:cut()
cheesepizza:box()
clampizza:pripare()
clampizza:bake()
clampizza:cut()
clampizza:box()
從**中能夠看出,建立物件之前,事實上是把物件的共同操作方法抽象出來,為以後物件的擴充套件做準備,這個介面能夠是介面類或者是抽象類,由詳細的子類實現或者繼承。可是對於簡單工廠裡的方法,僅僅確定建立哪個詳細的物件。
來看乙個比較通用的工廠模式框架**:
抽象產品類:
public abstract class product ;
public abstract void method2();
}
詳細產品類
public class concreteproduct1 implements product
}public class concreteproduct2 implements product
}
抽象工廠類:
public abstract class creator
詳細工廠類:
public class concretefactory extends creator catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)
return (t) product;
}}
詳細**測試類:
creator creator=new concretefactory();
product product= creator.createproducts(concreteproduct2.class);
假設乙個模組僅須要乙個工廠類,沒有必要把它生產出來,使用靜態方法就能夠啦,把上述的抽象工廠類直接替換為詳細工廠類,並使用靜態方法就能夠,這樣就變為簡單工廠模式,或者是靜態工廠模式。
寫的不好,希望多提意見,共同進步學習!謝謝
設計模式 學習筆記 簡單工廠模式
從接觸程式設計到現在已經很久了,從最早的面向過程到物件導向,後來演算法的學習,但是一直沒有接觸設計模式。前幾周,我申請的 大話設計模式 採購下來了,剛好藉著這個讀書的機會,把自己的學習筆記記錄下來,希望以後自己寫專案的時候可以應用到這些模式思想。1 運算的基類,所有的運算都必須繼承自這個類 基類,所...
設計模式學習筆記 簡單工廠模式
背景 簡單工廠模式是很多程式設計師學習的第乙個設計模式,因為其不但原理簡單而且易於上手,在日常工作的 中也常有體現。今天分享乙個基於實現 加 減 乘 除 計算器的需求基於簡單工廠模式來實現。錯誤示範 在學習簡單工廠模式之前,遇到這種需求我是這樣實現的 public static double cal...
設計模式學習筆記之簡單工廠模式
所謂簡單工廠模式,即提供建立物件的介面,而具體建立什麼物件,由客戶端決定。比如,我們有ibird這樣乙個抽象類,有chicken和duck這兩個類實現ibird。那麼,如果我們想靈活的建立chicken或ibird,那麼就需要用到簡單工廠模式。factory根據接收到的字串,決定返回的物件。客戶端用...