Java设计模式之抽象工厂模式
作者:马洪彪 时间:2022-05-30 12:45:16
一、场景描述
接《Java设计模式(一)工厂模式》
工厂模式有一缺点,就是破坏了类的封闭性原则。例如,如果需要增加Word文件的数据采集,此时按以下步骤操作:
创建Word文件数据采集类,实现仪器数据采集接口;
修改仪器数据采集工厂类,增加Word文件数据采集类的工厂方法;
调用工厂类的word文件方法;
步骤2修改了工厂类,如果每增加一实现类都需要修改工厂类,那么这样就不合理了。
解决办法是使用抽象工厂类,为每一个实现类都创建其工厂类,并增加工厂接口,使各工厂类实现该接口。
使用抽象工厂后,上述步骤更改为:
创建Word文件数据采集类,实现仪器数据采集接口;
创建Word文件数据采集类的工厂类,该类实现工厂接口,接口方法创建Word文件数据采集类;
获取Word文件数据采集类的工厂类对象,并调用工厂接口方法,创建类对象,然后调用其方法。
修改后,由于对工厂类进行了抽象,定义了工厂接口,因此新增实现类时不再需要修改原有代码,不破坏原有实现。
如下图所示:
二、示例代码
仪器数据采集接口:
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);
}
}
来源:http://www.cnblogs.com/mahongbiao/p/8619054.html
标签:Java,设计模式,抽象工厂模式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java避免死锁_动力节点Java学院整理
2023-05-07 15:02:03
SpringBoot核心@SpringBootApplication使用介绍
2023-11-25 08:33:59
![](https://img.aspxhome.com/file/2023/2/59202_0s.png)
Android中TimePicker与DatePicker时间日期选择组件的使用实例
2023-08-07 01:35:15
![](https://img.aspxhome.com/file/2023/0/84740_0s.jpg)
Java 根据网址查询DNS/IP地址的方法
2023-06-21 15:31:54
通过面试题解析 Java 类加载机制
2022-08-13 12:49:16
spring boot 2整合swagger-ui过程解析
2021-08-08 22:57:35
![](https://img.aspxhome.com/file/2023/1/76481_0s.png)
C#中txt数据写入的几种常见方法
2022-01-14 01:25:47
Java拦截器Interceptor实现原理及代码示例
2023-11-04 03:49:32
![](https://img.aspxhome.com/file/2023/8/61528_0s.jpg)
Springboot动态切换数据源的具体实现与原理分析
2022-11-24 13:45:26
![](https://img.aspxhome.com/file/2023/8/70918_0s.png)
详解SpringBoot定制@ResponseBody注解返回的Json格式
2023-07-26 13:47:02
Java中实现获取路径的方法汇总
2022-12-19 08:10:54
Java数组与堆栈相关知识总结
2023-11-12 06:12:18
![](https://img.aspxhome.com/file/2023/7/59337_0s.jpg)
Java实现驼峰、下划线互转的方法
2023-08-18 09:17:54
Java 中的变量类型
2022-05-27 20:00:19
Servlet3.0学习总结之基于Servlet3.0的文件上传实例
2023-09-02 01:51:33
![](https://img.aspxhome.com/file/2023/1/58141_0s.gif)
C#读写xml文件方法总结(超详细!)
2023-11-23 13:16:40
Javaweb监听器实例之统计在线人数
2023-02-08 11:47:23
![](https://img.aspxhome.com/file/2023/6/75006_0s.jpg)
Java JVM字节码指令集总结整理与介绍
2021-09-18 17:10:20
![](https://img.aspxhome.com/file/2023/9/71229_0s.png)
解决Android软键盘弹出覆盖h5页面输入框问题
2023-06-19 11:33:24
![](https://img.aspxhome.com/file/2023/7/83547_0s.jpg)
Java中接口和抽象类的区别详解
2022-09-28 15:21:19