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

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

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

簡單工廠模式
類圖

201642195447625.jpg (966×712)

通過一個工廠類,以一個條件來創(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)建 
 * 建立一個工廠類,對實現(xiàn)了同一接口的或者是存在繼承關(guān)系的一些類進行實例的創(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)品時需要傳遞相應(yīng)的參數(shù),如果傳遞不正確就取不到對象了。
改進:多方法創(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); 
  } 
} 

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

201642195549773.jpg (1396×882)

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

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

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

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

/* 
 * 1A 1B屬于Product1 同一產(chǎn)品等級結(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)品 型號A 
  public IProduct1 createProduct1B();//1類產(chǎn)品 型號B 
  public IProduct2 createProduct2A();//2類產(chǎn)品 型號A 
  public IProduct2 createProduct2B();//2類產(chǎn)品 型號B 
} 

//實體工廠 創(chuàng)建實體產(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)或者相互依賴的對象 
 * 
 * 流程:抽象工廠,實體工廠   生產(chǎn)產(chǎn)品 
 *   抽象產(chǎn)品,實體產(chǎn)品    實現(xiàn)產(chǎn)品功能 
 * 缺點:當需要增加一個產(chǎn)品(由抽象和實體構(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之Algorithm_analysis案例詳解

    Java之Algorithm_analysis案例詳解

    這篇文章主要介紹了Java之Algorithm_analysis案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java消息隊列Kafka的簡單概述

    Java消息隊列Kafka的簡單概述

    這篇文章主要介紹了Java消息隊列Kafka的簡單概述,消息系統(tǒng)負責將數(shù)據(jù)從一個應(yīng)用程序傳輸?shù)搅硪粋€應(yīng)用程序,應(yīng)用程序可以專注于數(shù)據(jù),不擔心如何共享它,需要的朋友可以參考下
    2023-07-07
  • Spring MVC-@RequestMapping注解詳解

    Spring MVC-@RequestMapping注解詳解

    @RequestMapping注解的作用,就是將請求和處理請求的控制器方法關(guān)聯(lián)起來,建立映射關(guān)系。這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • 分布式醫(yī)療掛號系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用

    分布式醫(yī)療掛號系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用

    這篇文章主要為大家介紹了分布式醫(yī)療掛號系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Java并發(fā)編程之LongAdder執(zhí)行情況解析

    Java并發(fā)編程之LongAdder執(zhí)行情況解析

    這篇文章主要為大家介紹了Java并發(fā)編程之LongAdder執(zhí)行情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java常見的阻塞隊列總結(jié)

    Java常見的阻塞隊列總結(jié)

    今天我們來討論另外一類容器:阻塞隊列,文中有非常詳細的代碼示例及介紹,對正在學習JAVA的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Mybatis中一條SQL使用兩個foreach的問題及解決

    Mybatis中一條SQL使用兩個foreach的問題及解決

    這篇文章主要介紹了Mybatis中一條SQL使用兩個foreach的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 8種常見的Java不規(guī)范代碼

    8種常見的Java不規(guī)范代碼

    本文主要介紹了8種常見的Java不規(guī)范代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 快速解決VS Code報錯:Java 11 or more recent is required to run. Please download and install a recent JDK

    快速解決VS Code報錯:Java 11 or more recent is required to run. Ple

    這篇文章主要介紹了快速解決VS Code報錯:Java 11 or more recent is required to run. Please download and install a recent JDK的相關(guān)資料,需要的朋友可以參考下
    2020-09-09
  • 基于Java反射的map自動裝配JavaBean工具類設(shè)計示例代碼

    基于Java反射的map自動裝配JavaBean工具類設(shè)計示例代碼

    這篇文章主要給大家介紹了關(guān)于基于Java反射的map自動裝配JavaBean工具類設(shè)計的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-10-10

最新評論