談談三種工廠模式 遠在上個世紀,電腦技術的大牛們就總結出了23種設計及模式,這些設計模式解決了我們程式在模擬現實世界事物以及邏輯時,會出現的一些問題,以及對一些常見的系統設計中常見的問題提出一些解決方案。 工廠模式是一種常見的實例化對象的一種方式,告別了new的方法,更符合現實世界的邏輯,因為現實 ...
談談三種工廠模式
遠在上個世紀,電腦技術的大牛們就總結出了23種設計及模式,這些設計模式解決了我們程式在模擬現實世界事物以及邏輯時,會出現的一些問題,以及對一些常見的系統設計中常見的問題提出一些解決方案。
工廠模式是一種常見的實例化對象的一種方式,告別了new的方法,更符合現實世界的邏輯,因為現實,對一些創建時需要配置一些東西的的問題是一種很好的解決方案,工廠模式分為三種:簡單工廠模式,工廠方法模式,抽象工廠模式;
簡單工廠模式:通過一個創造方法來創造類,將需求傳入進去可以的到相應的對象,值的一提的是簡單工廠模式並不屬於23種設計模式,=-=簡單代碼如下:
public Factory{ //工廠類 public Product create(String pro){ switch(pro){ case "A":return new ProductA(), case "B":return new ProductB() default:return null; } } } //產品父類 abstract class Product{} //產品子類A class ProductA extends Product{} //產品子類B class ProductB extends Product{}
工廠方法模式:簡單工廠模式在處理簡單幾個簡單固定的產品主類時是非常簡單高效的的,但是在設計模式中唯一不變的是變化,就是說在這個模式的運行中各種東西實在不斷變化的,比產品的種類數量,如果這個時候就要把Factory類中的創造方法改掉,著就對封裝性很不合理,於是就出現了簡單工廠模式的改進模式,工廠方法模式。工廠方法模式通過一個抽象的工廠類來創建工廠,再由工廠通過一定的方法創造一定的對象,這樣如果有新的產C出現不需要修改已有代碼只要新建一個產品的從子類和工廠的子類就可以啦,簡單代碼如下:
//抽象工廠類 abstract class Factory{ abstract Product create(); } //工廠A class FactoryA{ public Product create(){ return new ProductA(); }; } //工廠B class FactoryB{ public Product create(){ return new ProductA(); }; } //產品父類 abstract class Product{} //產品子類A class ProductA extends Product{} //產品子類B class ProductB extends Product{} public class App{ public static void main(String[] args){ Product p; Factory f=new FactoryA() //消費者類中創造A產品 p=f.create(); } }
抽象工廠模式:有了工廠方法模式,可以解決很大部分創造類的問題,但還有一個現實中的問題,有一個工廠的話可以創造一系列產品 ,如果工廠方法模式的話就需要創造一系列的工廠來完成這種效果,如何來解決這個問題呢?對於一些系列工廠問題就可以用一個可以系列描述的工廠來表示,每個工廠都有系列的的生產方法
這樣就可以滿足需求了,話不多說上代碼:
//抽象工廠類 abstract class Factory{ abstract ProductA create(); abstract ProductB create(); } //工廠M class FactoryM{ public ProductA create(){ return new ProductA(); } public ProductB create(){ return new ProductB(); } } //工廠N class FactoryM{ public ProductA create(){ return new ProductA(); } public ProductB create(){ return new ProductB(); } } //產品父類 abstract class Product{} //產品子類A abstract class ProductA extends Product{} //產品子類B abstract class ProductB extends Product{} //系列M產品 class ProductAM extends ProductA{} class ProductBM extends ProductB{} //系列N產品 class ProductAN extends ProductA{} class ProductBN extends ProductB{} public class App{ public static void main(String[] args){ Product p; Factory f=new FactoryA() //消費者類中創造A產品 p=f.create(); } }
OK
最後,都是個人觀點,感謝指錯