Java設(shè)計模式之抽象工廠模式
一、場景描述
工廠模式有一缺點,就是破壞了類的封閉性原則。例如,如果需要增加Word文件的數(shù)據(jù)采集,此時按以下步驟操作:
- 創(chuàng)建Word文件數(shù)據(jù)采集類,實現(xiàn)儀器數(shù)據(jù)采集接口;
- 修改儀器數(shù)據(jù)采集工廠類,增加Word文件數(shù)據(jù)采集類的工廠方法;
- 調(diào)用工廠類的word文件方法;
步驟2修改了工廠類,如果每增加一實現(xiàn)類都需要修改工廠類,那么這樣就不合理了。
解決辦法是使用抽象工廠類,為每一個實現(xiàn)類都創(chuàng)建其工廠類,并增加工廠接口,使各工廠類實現(xiàn)該接口。
使用抽象工廠后,上述步驟更改為:
- 創(chuàng)建Word文件數(shù)據(jù)采集類,實現(xiàn)儀器數(shù)據(jù)采集接口;
- 創(chuàng)建Word文件數(shù)據(jù)采集類的工廠類,該類實現(xiàn)工廠接口,接口方法創(chuàng)建Word文件數(shù)據(jù)采集類;
- 獲取Word文件數(shù)據(jù)采集類的工廠類對象,并調(diào)用工廠接口方法,創(chuàng)建類對象,然后調(diào)用其方法。
修改后,由于對工廠類進行了抽象,定義了工廠接口,因此新增實現(xiàn)類時不再需要修改原有代碼,不破壞原有實現(xiàn)。
如下圖所示:

二、示例代碼
儀器數(shù)據(jù)采集接口:
package lims.designpatterndemo.abstractfactorydemo;
public interface EquipmentDataCapture {
public String capture(String filePath);
}
PDF文件采集類:
package lims.designpatterndemo.abstractfactorydemo;
public class PdfFileCapture implements EquipmentDataCapture{
@Override
public String capture(String filePath) {
return "PDF file content";
}
}
Excel文件采集類:
package lims.designpatterndemo.abstractfactorydemo;
public class ExcelFileCapture implements EquipmentDataCapture{
@Override
public String capture(String filePath) {
return "Excel File Content";
}
}
抽象工廠,即工廠接口:
package lims.designpatterndemo.abstractfactorydemo;
public interface EquipmentDataCaptureFactory {
public EquipmentDataCapture getCapture();
}
PDF文件采集工廠類:
package lims.designpatterndemo.abstractfactorydemo;
public class PdfFileCaptureFactory implements EquipmentDataCaptureFactory {
@Override
public EquipmentDataCapture getCapture() {
return new PdfFileCapture();
}
}
Excel文件采集工廠類:
package lims.designpatterndemo.abstractfactorydemo;
public class ExcelFileCaptureFactory implements EquipmentDataCaptureFactory {
@Override
public EquipmentDataCapture getCapture() {
return new ExcelFileCapture();
}
}
調(diào)用示例:
package lims.designpatterndemo.abstractfactorydemo;
public class AbstractFactoryDemo {
public static void main(String[] args) {
EquipmentDataCaptureFactory facotry = new PdfFileCaptureFactory();
facotry = new ExcelFileCaptureFactory();
EquipmentDataCapture capture = facotry.getCapture();
String fileContent = capture.capture("");
System.out.println(fileContent);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Java創(chuàng)建型設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java設(shè)計模式之抽象工廠模式淺析講解
- Java設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計模式之抽象工廠模式
- 深入理解Java設(shè)計模式之抽象工廠模式
- Java設(shè)計模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)
- Java設(shè)計模式之抽象工廠模式詳解
- Java設(shè)計模式之工廠模式分析【簡單工廠、工廠方法、抽象工廠】
- Java設(shè)計模式筆記之抽象工廠代碼示例
- Java設(shè)計模式之抽象工廠模式實例詳解
- Java設(shè)計模式編程中簡單工廠與抽象工廠模式的使用實例
- Java設(shè)計模式編程中的工廠方法模式和抽象工廠模式
- Java設(shè)計模式之工廠方法和抽象工廠
相關(guān)文章
SpringBoot Maven 項目 pom 中的 plugin&n
本文詳細介紹了Spring Boot Maven項目打包成jar文件時使用的spring-boot-maven-plugin插件,深入探討了插件的配置元素,結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-01-01
利用Java實體bean對象批量數(shù)據(jù)傳輸處理方案小結(jié)
javabean是對面向?qū)ο笏枷氲囊环N具體實施的表現(xiàn),本文重點給大家介紹利用Java實體bean對象批量數(shù)據(jù)傳輸處理方案小結(jié),本文通過兩種方案給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2021-05-05
基于JTable的列寬與內(nèi)容自適應(yīng)的實現(xiàn)方法
本篇文章是對JTable的列寬與內(nèi)容自適應(yīng)的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
SpringBoot利用自定義注解實現(xiàn)多數(shù)據(jù)源
這篇文章主要為大家詳細介紹了SpringBoot如何利用自定義注解實現(xiàn)多數(shù)據(jù)源效果,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下2022-10-10
Java圖形化編程之JFrame疫苗接種系統(tǒng)詳解
GUI圖形界面設(shè)計是用戶和程序交互的工具,用戶通過圖形界面控制程序事件的發(fā)生。首先介紹Swing的基本體系結(jié)構(gòu),這是底層2021-09-09

