国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java設計模式之抽象工廠模式

2024-07-14 08:40:06
字體:
來源:轉載
供稿:網友

一、場景描述

工廠模式有一缺點,就是破壞了類的封閉性原則。例如,如果需要增加Word文件的數據采集,此時按以下步驟操作:

  • 創建Word文件數據采集類,實現儀器數據采集接口;
  • 修改儀器數據采集工廠類,增加Word文件數據采集類的工廠方法;
  • 調用工廠類的word文件方法;

步驟2修改了工廠類,如果每增加一實現類都需要修改工廠類,那么這樣就不合理了。

解決辦法是使用抽象工廠類,為每一個實現類都創建其工廠類,并增加工廠接口,使各工廠類實現該接口。

使用抽象工廠后,上述步驟更改為:

  • 創建Word文件數據采集類,實現儀器數據采集接口;
  • 創建Word文件數據采集類的工廠類,該類實現工廠接口,接口方法創建Word文件數據采集類;
  • 獲取Word文件數據采集類的工廠類對象,并調用工廠接口方法,創建類對象,然后調用其方法。

修改后,由于對工廠類進行了抽象,定義了工廠接口,因此新增實現類時不再需要修改原有代碼,不破壞原有實現。

如下圖所示:

Java,設計模式,抽象工廠模式

二、示例代碼

儀器數據采集接口:

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();  }}

調用示例:

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);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梅河口市| 张掖市| 咸宁市| 徐汇区| 荣昌县| 德格县| 新丰县| 镇原县| 泸州市| 海晏县| 新干县| 广州市| 鄂州市| 乐业县| 高雄县| 梅州市| 遂溪县| 临城县| 陵川县| 丰原市| 万州区| 鱼台县| 丰城市| 乌鲁木齐县| 湖州市| 博湖县| 屏南县| 娱乐| 永嘉县| 尤溪县| 浦北县| 北川| 灌云县| 正镶白旗| 岳阳市| 洪泽县| 邵阳市| 布尔津县| 寻甸| 申扎县| 肃北|