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

Java設(shè)計(jì)模式編程中簡單工廠與抽象工廠模式的使用實(shí)例

 更新時(shí)間:2016年04月21日 09:56:51   作者:匆忙擁擠repeat  
這篇文章主要介紹了Java設(shè)計(jì)模式編程中簡單工廠與抽象工廠模式的使用實(shí)例,簡單工廠與抽象工廠都可以歸類于設(shè)計(jì)模式中的創(chuàng)建型模式,需要的朋友可以參考下

簡單工廠模式
類圖

201642195447625.jpg (966×712)

通過一個(gè)工廠類,以一個(gè)條件來創(chuàng)建對應(yīng)的對象

//業(yè)務(wù)功能 
public interface ICalculation { 
  double getResult(double numA, double numB); 
} 

public class CalcAdd implements ICalculation { 
 
  @Override 
  public double getResult(double numA, double numB) { 
    System.out.println("加法"); 
    return numA + numB; 
  } 
 
} 

public class CalcSubtract implements ICalculation { 
 
  @Override 
  public double getResult(double numA, double numB) { 
    System.out.println("減法"); 
    return numA - numB; 
  } 
 
} 

/* 
 * 簡單工廠模式 關(guān)注:對象的創(chuàng)建 
 * 建立一個(gè)工廠類,對實(shí)現(xiàn)了同一接口的或者是存在繼承關(guān)系的一些類進(jìn)行實(shí)例的創(chuàng)建 
 */ 
public class Test4Simple { 
  public static void main(String[] args) { 
//   String operation = "/"; 
    String operation = "+"; 
//   String operation = "-"; 
//   String operation = "*"; 
    double numA = 182, numB = 33; 
    ICalculation createCalc = CalcSimpleFactory.createCalc(operation); 
    double result = createCalc.getResult(numA, numB); 
    System.out.println(result); 
  } 
} 

簡單工廠的缺陷: 簡單工廠創(chuàng)建產(chǎn)品時(shí)需要傳遞相應(yīng)的參數(shù),如果傳遞不正確就取不到對象了。
改進(jìn):多方法創(chuàng)建不同產(chǎn)品
類圖

201642195519770.jpg (926×736)

public class CalcMultipleFactory { 
   
  public static ICalculation produceAdd() { 
    return new CalcAdd(); 
  } 
   
  public static ICalculation produceSubtract() { 
    return new CalcSubtract(); 
  } 
   
  public static ICalculation produceMultiply() { 
    return new CalcMultiply(); 
  } 
   
  public static ICalculation produceDivide() { 
    return new CalcDivide(); 
  } 
} 

public class Test4Multiple { 
 
  public static void main(String[] args) { 
    double numA = 182, numB = 33; 
     
    ICalculation createCalc = CalcMultipleFactory.produceAdd(); 
    double result = createCalc.getResult(numA, numB); 
    System.out.println(result); 
     
    createCalc = CalcMultipleFactory.produceSubtract(); 
    result = createCalc.getResult(numA, numB); 
    System.out.println(result); 
     
    createCalc = CalcMultipleFactory.produceMultiply(); 
    result = createCalc.getResult(numA, numB); 
    System.out.println(result); 
     
    createCalc = CalcMultipleFactory.produceDivide(); 
    result = createCalc.getResult(numA, numB); 
    System.out.println(result); 
  } 
} 

抽象工廠模式
里面有幾個(gè)概念:抽象工廠、實(shí)體工廠、抽象產(chǎn)品、實(shí)體產(chǎn)品
抽象工廠:定義創(chuàng)建產(chǎn)品的抽象方法
實(shí)體工廠:具體的創(chuàng)建哪種產(chǎn)品
抽象產(chǎn)品:一個(gè)接口或基類
實(shí)體產(chǎn)品:實(shí)現(xiàn)具體功能,或派生
類圖

201642195549773.jpg (1396×882)

//抽象產(chǎn)品1 
public interface IProduct1 { 
  public void show(); 
} 

//抽象產(chǎn)品2 
public interface IProduct2 { 
  public void show(); 
} 

//實(shí)體產(chǎn)品1 
public class Product1 implements IProduct1 {  
  public void show() {  
    System.out.println("創(chuàng)建了1型產(chǎn)品");  
  }  
}  

//實(shí)體產(chǎn)品2 
public class Product2 implements IProduct2 { 
  public void show() { 
    System.out.println("創(chuàng)建了2型產(chǎn)品"); 
  } 
} 

/* 
 * 1A 1B屬于Product1 同一產(chǎn)品等級(jí)結(jié)構(gòu)中 
 * 2A 2B屬于Product2 
 */ 
public class GradeProduct1A extends Product1 { 
 
  @Override 
  public void show() { 
    super.show(); 
    System.out.println("這是產(chǎn)品1下的:產(chǎn)品A"); 
  } 
   
} 

public class GradeProduct1B extends Product1 { 
 
  @Override 
  public void show() { 
    super.show(); 
    System.out.println("這是產(chǎn)品1下的:產(chǎn)品B"); 
  } 
} 

public class GradeProduct2A extends Product2 { 
 
  @Override 
  public void show() { 
    super.show(); 
    System.out.println("這是產(chǎn)品2下的:產(chǎn)品A"); 
  } 
} 

public class GradeProduct2B extends Product2 { 
 
  @Override 
  public void show() { 
    super.show(); 
    System.out.println("這是產(chǎn)品2下的:產(chǎn)品B"); 
  } 
} 

//抽象工廠 創(chuàng)建不同的抽象產(chǎn)品 
public interface IFactory { 
  public IProduct1 createProduct1A();//1類產(chǎn)品 型號(hào)A 
  public IProduct1 createProduct1B();//1類產(chǎn)品 型號(hào)B 
  public IProduct2 createProduct2A();//2類產(chǎn)品 型號(hào)A 
  public IProduct2 createProduct2B();//2類產(chǎn)品 型號(hào)B 
} 

//實(shí)體工廠 創(chuàng)建實(shí)體產(chǎn)品,返回類型為抽象產(chǎn)品 
public class Factory implements IFactory { 
 
  public IProduct1 createProduct1A() { 
    return new GradeProduct1A(); 
  } 
 
  public IProduct1 createProduct1B() { 
    return new GradeProduct1B(); 
  } 
 
  public IProduct2 createProduct2A() { 
    return new GradeProduct2A(); 
  } 
 
  public IProduct2 createProduct2B() { 
    return new GradeProduct2B(); 
  } 
} 

/* 
 * 抽象工廠模式:用來創(chuàng)建一組相關(guān)或者相互依賴的對象 
 * 
 * 流程:抽象工廠,實(shí)體工廠   生產(chǎn)產(chǎn)品 
 *   抽象產(chǎn)品,實(shí)體產(chǎn)品    實(shí)現(xiàn)產(chǎn)品功能 
 * 缺點(diǎn):當(dāng)需要增加一個(gè)產(chǎn)品(由抽象和實(shí)體構(gòu)成),工廠都需要更改 
 */ 
public class Test4Abstract { 
  public static void main(String[] args) { 
    IFactory factory = new Factory(); 
    IProduct1 product1a = factory.createProduct1A(); 
    product1a.show(); 
    IProduct1 product1b = factory.createProduct1B(); 
    product1b.show(); 
     
    IProduct2 product2a = factory.createProduct2A(); 
    product2a.show(); 
    IProduct2 product2b = factory.createProduct2B(); 
    product2b.show(); 
  } 
} 

相關(guān)文章

  • Java并發(fā)編程中構(gòu)建自定義同步工具

    Java并發(fā)編程中構(gòu)建自定義同步工具

    這篇文章主要介紹了Java并發(fā)編程中構(gòu)建自定義同步工具,本文講解了可阻塞狀態(tài)依賴操作的結(jié)構(gòu)、有界緩存實(shí)現(xiàn)基類示例、阻塞實(shí)現(xiàn)方式一:拋異常給調(diào)用者、阻塞實(shí)現(xiàn)方式二:通過輪詢和休眠、阻塞實(shí)現(xiàn)方式三:條件隊(duì)列等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • java中堆和棧的區(qū)別分析

    java中堆和棧的區(qū)別分析

    這篇文章主要介紹了java中堆和棧的區(qū)別,分析了Java中堆和棧的原理及使用時(shí)的注意事項(xiàng),需要的朋友可以參考下
    2014-09-09
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java單鏈表逆序用法代碼示例

    java單鏈表逆序用法代碼示例

    這篇文章主要介紹了java單鏈表逆序用法代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 關(guān)于Future機(jī)制原理及解析

    關(guān)于Future機(jī)制原理及解析

    這篇文章主要介紹了關(guān)于Future機(jī)制原理,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java通過URL獲取公眾號(hào)文章生成HTML的方法

    Java通過URL獲取公眾號(hào)文章生成HTML的方法

    這篇文章主要介紹了Java通過URL獲取公眾號(hào)文章生成HTML的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • maven package 打包報(bào)錯(cuò) Failed to execute goal的解決

    maven package 打包報(bào)錯(cuò) Failed to execute goal的解決

    這篇文章主要介紹了maven package 打包報(bào)錯(cuò) Failed to execute goal的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù)的實(shí)例

    Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù)的實(shí)例

    本文主要介紹了Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • springboot整合JPA過程解析

    springboot整合JPA過程解析

    這篇文章主要介紹了springboot整合JPA過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • mybatis查詢語句揭秘之參數(shù)解析

    mybatis查詢語句揭秘之參數(shù)解析

    這篇文章主要給大家介紹了關(guān)于mybatis查詢語句之參數(shù)解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

信阳市| 天水市| 西盟| 石泉县| 三门峡市| 山丹县| 汉川市| 祁东县| 青州市| 勃利县| 恩平市| 延庆县| 龙州县| 永丰县| 凤阳县| 呼伦贝尔市| 茶陵县| 竹山县| 即墨市| 济源市| 阜康市| 英山县| 丹东市| 榆林市| 嵩明县| 翼城县| 宜昌市| 漳平市| 法库县| 资阳市| 长治市| 分宜县| 闸北区| 甘南县| 湖南省| 鸡东县| 渭南市| 衡阳市| 耒阳市| 双牌县| 康定县|