欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之靜態(tài)工廠模式詳解

 更新時(shí)間:2017年09月21日 11:09:51   作者:索隆  
這篇文章主要介紹了Java設(shè)計(jì)模式之靜態(tài)工廠模式,簡(jiǎn)單說明了靜態(tài)工廠模式的概念、原理、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下

本文實(shí)例講述了Java設(shè)計(jì)模式之靜態(tài)工廠模式。分享給大家供大家參考,具體如下:

靜態(tài)工廠模式(static factory)也叫簡(jiǎn)單工廠模式。

涉及到3個(gè)角色工廠類角色,抽象產(chǎn)品類角色具體產(chǎn)品類角色。

抽象產(chǎn)品類可以使用接口或者父類來描述產(chǎn)品對(duì)象的行為特征。

具體產(chǎn)品類就是某一具體的對(duì)象。

靜態(tài)工廠類有一個(gè)靜態(tài)的方法,含有判斷邏輯,決定要?jiǎng)?chuàng)建哪一種具體的產(chǎn)品對(duì)象。

其設(shè)計(jì)模式如下:

抽象產(chǎn)品類  IProduct

package org.test.design.sf;
public interface IProduct {
  void work();
}

具體產(chǎn)品類   ProductA   ProductB

package org.test.design.sf;
public class ProductA implements IProduct {
  public void work() {
    System.out.println("Here is ProductA, for your dedicated service.");
  }
}

package org.test.design.sf;
public class ProductB implements IProduct {
  public void work() {
    System.out.println("Here is ProductB, for your dedicated service.");
  }
}

工廠類  ProductFactory

package org.test.design.sf;
/**
 * 靜態(tài)工廠模式
 * @author lushuaiyin
 *
 */
public class ProductFactory {
  public static IProduct product=null;//靜態(tài)
  //靜態(tài)方法
  public static IProduct getProduct(String productType) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
//   if(productType==null||productType.trim().equals("")){//默認(rèn)創(chuàng)建ProductA
//     product=new ProductA();
//   }else if(productType.trim().equals("ProductA")){
//     product=new ProductA();
//   }else if(productType.trim().equals("ProductB")){
//     product=new ProductB();
//   }
    //靜態(tài)工廠一般使用類的反射來構(gòu)建對(duì)象,像上面的構(gòu)建也可以。
    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;
  }
}

測(cè)試:

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.
*/

這種模式的優(yōu)點(diǎn)就是,工廠類負(fù)責(zé)所有產(chǎn)品對(duì)象的創(chuàng)建,客戶端在需要?jiǎng)?chuàng)建對(duì)象時(shí),告訴工廠需要哪種類型,工廠就負(fù)責(zé)創(chuàng)建。

缺點(diǎn):把所有類型的對(duì)象集中在一種工廠創(chuàng)建。當(dāng)產(chǎn)品對(duì)象在以后出現(xiàn)新的類型以及類型結(jié)構(gòu)變得復(fù)雜,這個(gè)工廠就會(huì)顯得簡(jiǎn)單混亂。

比如,一個(gè)生產(chǎn)自行車的工廠,它會(huì)生產(chǎn)各種自行車,男士女士的等等。隨著工廠發(fā)展壯大,它收購(gòu)了電視工廠。這時(shí)候,工廠還是叫自行車制造廠。但是生產(chǎn)電視。也就是在工廠類中加入了新的產(chǎn)品類型:電視。這樣的工廠也能正常運(yùn)轉(zhuǎn),但是結(jié)構(gòu)顯得簡(jiǎn)單,功能混亂。

同時(shí)使用靜態(tài)方法,也無法實(shí)現(xiàn)子類繼承。

解決這樣的問題就涉及到另一種稍顯復(fù)雜的模式:工廠模式。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java agent 使用及實(shí)現(xiàn)代碼

    java agent 使用及實(shí)現(xiàn)代碼

    java agent的作用可以在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼。本文主要給大家講解java agent 使用及實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2018-07-07
  • Java?Spring讀取和存儲(chǔ)詳細(xì)操作

    Java?Spring讀取和存儲(chǔ)詳細(xì)操作

    這篇文章主要介紹了Spring讀取和存儲(chǔ)詳細(xì)操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java的ThreadLocal源碼詳細(xì)解讀

    Java的ThreadLocal源碼詳細(xì)解讀

    這篇文章主要介紹了Java的ThreadLocal源碼詳細(xì)解讀,ThreadLocal翻譯過來就是線程本地,也就是本地線程變量,意思是ThreadLocal中填充的變量屬于當(dāng)前線程,該變量對(duì)其他線程而言是隔離的,需要的朋友可以參考下
    2023-08-08
  • 如何加密配置文件里的敏感數(shù)據(jù)

    如何加密配置文件里的敏感數(shù)據(jù)

    這篇文章主要介紹了加密配置文件里的敏感數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Logback設(shè)置日志級(jí)別

    使用Logback設(shè)置日志級(jí)別

    這篇文章主要介紹了使用Logback設(shè)置日志級(jí)別的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題

    Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題

    YYYY-MM-dd可能會(huì)導(dǎo)致跨年周的日期被歸屬到錯(cuò)誤的年份, yyyy-MM-dd總是表示實(shí)際的日歷年份,無論日期所在的周是否跨年,本文就來介紹一下兩者的區(qū)別,感興趣的可以了解一下
    2024-01-01
  • java中 == 與 equal 的區(qū)別講解

    java中 == 與 equal 的區(qū)別講解

    這篇文章介紹了java中 == 與 equal 的區(qū)別,有需要的朋友可以參考一下
    2013-10-10
  • Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼

    Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼

    這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng),可以實(shí)現(xiàn)存款,取款,查詢等功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • java 嵌套類的詳解及實(shí)例代碼

    java 嵌套類的詳解及實(shí)例代碼

    這篇文章主要介紹了java 嵌套類的詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 深入學(xué)習(xí)Java 動(dòng)態(tài)代理

    深入學(xué)習(xí)Java 動(dòng)態(tài)代理

    Java 動(dòng)態(tài)代理機(jī)制的出現(xiàn),使得 Java 開發(fā)人員不用手工編寫代理類,只要簡(jiǎn)單地指定一組接口及委托類對(duì)象,便能動(dòng)態(tài)地獲得代理類。下面小編和大家來一起學(xué)習(xí)一下吧
    2019-05-05

最新評(píng)論