一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java設計模式之靜態工廠模式詳解

Java設計模式之靜態工廠模式詳解

2021-01-07 14:14索隆 Java教程

這篇文章主要介紹了Java設計模式之靜態工廠模式,簡單說明了靜態工廠模式的概念、原理、實現與使用方法,需要的朋友可以參考下

本文實例講述了Java設計模式之靜態工廠模式。分享給大家供大家參考,具體如下:

靜態工廠模式(static factory)也叫簡單工廠模式。

涉及到3個角色工廠類角色抽象產品類角色具體產品類角色

抽象產品類可以使用接口或者父類來描述產品對象的行為特征。

具體產品類就是某一具體的對象。

靜態工廠類有一個靜態的方法,含有判斷邏輯,決定要創建哪一種具體的產品對象。

其設計模式如下:

Java設計模式之靜態工廠模式詳解

抽象產品類  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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产在线精品99一卡2卡 | 色交视频 | 日本一区二区三区在线 视频 | 国产成人亚洲精品一区二区在线看 | 国产美女做爰免费视频网址 | 午夜视频网站 | 日本大尺度激情做爰叫床 | 成人网欧美亚洲影视图片 | a性片| 99久久精品国产一区二区 | 亚洲区视频在线观看 | 国产一线天 | 欧美2区 | 成人网址大全 | 日韩亚洲欧美理论片 | 国产亚洲综合久久 | 嗯啊好大视频 | 精品久久久久久国产 | 成人影音先锋 | aaaa黄色片| 高h文恩好大好爽 | 国产精品一区二区在线观看完整版 | 国内自拍网红在线自拍综合 | 国产成人亚洲精品乱码在线观看 | 国内精品久久久久影院中国 | 褪色的憎恨 | 99精品视频免费 | 国产第一草草影院 | 美女主播免费观看 | 天天操天天射天天色 | 亚州精品永久观看视频 | zoofilivideo杂交3d| 国产精品合集久久久久青苹果 | 精品国产福利片在线观看 | 日本xnxnxnxnxn护士 | 白丝捆绑调教 | 狠狠综合久久综合网站 | 国产真实一区二区三区 | 国产精品福利久久2020 | 国产成人精品免费2021 | bb18lv黑料正能量 |