最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ā)展壯大,它收購了電視工廠。這時(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)文章

  • Spring使用@Autowired注解靜態(tài)實(shí)例對(duì)象方式

    Spring使用@Autowired注解靜態(tài)實(shí)例對(duì)象方式

    這篇文章主要介紹了Spring使用@Autowired注解靜態(tài)實(shí)例對(duì)象方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中求Logn/log2 的精度問題

    Java中求Logn/log2 的精度問題

    這篇文章主要介紹了Java中求Logn/log2 的精度問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • @Autowired 自動(dòng)注入接口失敗的原因及解決

    @Autowired 自動(dòng)注入接口失敗的原因及解決

    這篇文章主要介紹了@Autowired 自動(dòng)注入接口失敗的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • spring cloud 配置中心客戶端啟動(dòng)遇到的問題

    spring cloud 配置中心客戶端啟動(dòng)遇到的問題

    這篇文章主要介紹了spring cloud 配置中心客戶端啟動(dòng)遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)

    Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)

    下面小編就為大家?guī)硪黄狫ava數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java對(duì)各種變量、方法和類等要素命名時(shí)使用的字符序列稱為標(biāo)識(shí)符,凡是自己可以起名字的地方都叫標(biāo)識(shí)符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下
    2022-05-05
  • java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算(相當(dāng)全面)

    java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算(相當(dāng)全面)

    這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算的相關(guān)資料,Java中的Date類是用來表示日期和時(shí)間的類,它提供了一些常用的方法來處理日期和時(shí)間的操作,需要的朋友可以參考下
    2023-12-12
  • SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫的配置方法

    SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫的配置方法

    這篇文章主要介紹了SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫的配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • idea配置SVN的教程

    idea配置SVN的教程

    文章介紹了如何安裝和配置TortoiseSVN以及在IntelliJ?IDEA中配置SVN,首先,安裝TortoiseSVN時(shí)需要選擇與電腦配置相匹配的版本,并確保安裝命令行客戶端工具,其次,在IntelliJ?IDEA中配置SVN時(shí),需要指定SVN可執(zhí)行文件的路徑
    2025-01-01
  • Spring Web MVC和Hibernate的集成配置詳解

    Spring Web MVC和Hibernate的集成配置詳解

    這篇文章主要介紹了Spring Web MVC和Hibernate的集成配置詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12

最新評(píng)論

乳源| 石棉县| 十堰市| 黑山县| 天门市| 屏东市| 娱乐| 正镶白旗| 星子县| 伊川县| 鄂托克前旗| 平潭县| 平乐县| 宁波市| 偏关县| 民和| 雅安市| 岳阳市| 夏津县| 方山县| 宜良县| 疏勒县| 焦作市| 盖州市| 万州区| 永和县| 绥滨县| 泽库县| 黔西| 汤阴县| 满城县| 义马市| 宁陕县| 建瓯市| 黄大仙区| 莎车县| 洪江市| 平定县| 茶陵县| 沙湾县| 玉环县|