本文實例講述了Java設計模式之靜態工廠模式。分享給大家供大家參考,具體如下:
靜態工廠模式(static factory)也叫簡單工廠模式。
涉及到3個角色:工廠類角色,抽象產品類角色和具體產品類角色。
抽象產品類可以使用接口或者父類來描述產品對象的行為特征。
具體產品類就是某一具體的對象。
靜態工廠類有一個靜態的方法,含有判斷邏輯,決定要創建哪一種具體的產品對象。
其設計模式如下:
抽象產品類 IProduct
1
2
3
4
|
package org.test.design.sf; public interface IProduct { void work(); } |
具體產品類 ProductA ProductB
1
2
3
4
5
6
|
package org.test.design.sf; public class ProductA implements IProduct { public void work() { System.out.println( "Here is ProductA, for your dedicated service." ); } } |
1
2
3
4
5
6
|
package org.test.design.sf; public class ProductB implements IProduct { public void work() { System.out.println( "Here is ProductB, for your dedicated service." ); } } |
工廠類 ProductFactory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package org.test.design.sf; /** * 靜態工廠模式 * @author lushuaiyin * */ public class ProductFactory { public static IProduct product= null ; //靜態 //靜態方法 public static IProduct getProduct(String productType) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ // if(productType==null||productType.trim().equals("")){//默認創建ProductA // product=new ProductA(); // }else if(productType.trim().equals("ProductA")){ // product=new ProductA(); // }else if(productType.trim().equals("ProductB")){ // product=new ProductB(); // } //靜態工廠一般使用類的反射來構建對象,像上面的構建也可以。 if (productType.trim().equals( "ProductA" )){ product=(IProduct)Class.forName( "org.test.design.sf.ProductA" ).newInstance(); } else if (productType.trim().equals( "ProductB" )){ product=(IProduct)Class.forName( "org.test.design.sf.ProductB" ).newInstance(); } return product; } } |
測試:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package org.test.design.sf; public class TestMain { /** * @param args * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException */ public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { IProduct product_a=ProductFactory.getProduct( "ProductA" ); product_a.work(); IProduct product_b=ProductFactory.getProduct( "ProductB" ); product_b.work(); } } /*打印 Here is ProductA, for your dedicated service. Here is ProductB, for your dedicated service. */ |
這種模式的優點就是,工廠類負責所有產品對象的創建,客戶端在需要創建對象時,告訴工廠需要哪種類型,工廠就負責創建。
缺點:把所有類型的對象集中在一種工廠創建。當產品對象在以后出現新的類型以及類型結構變得復雜,這個工廠就會顯得簡單混亂。
比如,一個生產自行車的工廠,它會生產各種自行車,男士女士的等等。隨著工廠發展壯大,它收購了電視工廠。這時候,工廠還是叫自行車制造廠。但是生產電視。也就是在工廠類中加入了新的產品類型:電視。這樣的工廠也能正常運轉,但是結構顯得簡單,功能混亂。
同時使用靜態方法,也無法實現子類繼承。
解決這樣的問題就涉及到另一種稍顯復雜的模式:工廠模式。
希望本文所述對大家java程序設計有所幫助。
原文鏈接:http://blog.csdn.net/lushuaiyin/article/details/8917334