Java设计模式之抽象工厂模式
作者:马洪彪 发布时间:2022-05-30 12:45:16
标签:Java,设计模式,抽象工厂模式
一、场景描述
接《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
0
投稿
猜你喜欢
- 一、NIOjava.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所
- 规则1(无继承情况下):对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、
- Java 里的 * 是动态拦截 action 调用的对象,它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也
- 前言BeanPostProcessor 接口定义了一个你可以自己实现的回调方法,来实现你自己的实例化逻辑、依赖解决逻辑等,如果你想要在Spr
- 前言C# 11 中即将到来一个可以让重视性能的开发者狂喜的重量级特性,这个特性主要是围绕着一个重要底层性能设施 ref 和 struct 的
- MyBatis一对多的xml配置用的是window上面的画图板,没法以文字的方式展示出来,见谅嵌套查询嵌套结果一对多关联查询xml配置写法
- 当你要做一个图库的项目时,对图片大小、像素的控制是首先需要解决的难题。一、单图生成略缩图单图经过重新绘制,生成新的图片。新图可以按一定比例由
- IntelliJ IDEA是很多程序员必备且在业界被公认为最好的Java开发工具,有很多小伙伴在安装完IDEA并且tomcat之后,启动to
- 本地仓库主要是一种缓存,当你使用远程仓库中下载组件后,它下一次会优先从本地进行加载,一般位于USER_HOME/.m2目录下,我们自己也可以
- 1.雪崩效应 雪崩效应如上图所示,假设我们有3个微服务A,B,C,A调用B,B调用C,如果C挂掉了,由于B是同步调用,不断等待,导致资源耗尽
- Spingboot JPA CriteriaBuilder获取指定字段废话不说直接贴代码public class ActivityVO im
- 委托定义类型,类型指定特定方法签名。可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数
- 前言自 Java 7 以来,java 中的 switch 语句经历了快速发展。因此,在本文中,我们将通过示例讨论 switch 语句从 ja
- 本文实例讲述了Java实现的求逆矩阵算法。分享给大家供大家参考,具体如下:package demo;public class MatrixI
- java修改JFrame默认字体修改默认字体的方法很简单。首先我们随便写一个按钮出来:import javax.swing.*; publi
- 如何解决某个节点故障的问题?如何解决数据一致性的问题?如何解决数据倾斜的问题?CAP理论先从定义开始:C(Consistence):一致性所
- JWT简介Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RF
- 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1)
- 杨辉三角的规律:1.每行的数据个数和在第几行一样。2.每行第一个数和最后一个数都是1.3.每行除了第一个数据和最后一个数据 其他数据的值等于
- * 验证码地址:https://007.qq.com/online.html* 使用OpenCv模板匹配* 成功率90%左右* Java +