【JAVA设计模式】简单工厂模式(Simple Factory Pattern)

从Excel到‘一张图’办案:手把手教你用AbutionGraph构建公安经侦知识图谱(含数据建模避坑指南) 本文详细介绍了如何利用AbutionGraph时序图数仓技术,将公安经侦领域的Excel、银行流水等碎片化数据转化为可交互的知识图谱。通过数据清洗、实体关系模型设计、时序数据处理等步骤,实现高效智能分析,提升办案效率。特别包含数据建模避坑指南和实战案例,助力公安金融案件侦破。 阅读详情

一、定义


提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

PS:我们都知道JAVA思想一直推崇“ 面向接口编程”。而接口的思想就是“ 封装隔离”,即外部调用只能通过接口进行调用,外部调用并不知道内部具体实现,也就是说外部调用和内部实现是被接口隔离开的。那么只要接口不变,内部实现的变化就不会影响到外部应用,使得系统更加灵活,增加系统的扩展性和可维护性,这也就是所谓的“ 接口是系统可拔插的保证”。

二、案例

假设有一个接口叫Api,然后有一个实现类Impl实现了它,如何在客户端使用这个接口?

三、未使用模式情况

So Easy !我们可以很快画出这个案例的类图并写出代码。

/**
 * @ClassName Api
 * @Description: 定义一个接口
 * @author Jerry
 * @date 2016年3月26日 下午11:27:32
 */
public interface Api {
	/** 
	* @Description: 简单实现,传入字符串打印 
	* @param @param str  
	*/
	public void test(String str);
}
/**
 * @ClassName Impl
 * @Description: 实现Api接口
 * @author Jerry
 * @date 2016年3月27日 上午10:12:27
 */
public class Impl implements Api {
	
	@Override
	public void test(String str) {
		System.out.println(str);
	}
}
/**
 * @ClassName Client
 * @Description: 外部调用
 * @author Jerry
 * @date 2016年3月27日 上午10:13:35
 */
public class Client {

	public static void main(String[] args) {
		Api api = new Impl();
		api.test("最爱你的人是我,你怎么舍得我难过");
	}

}
如果我们仔细想想就会发现,这样的设计违背了接口的设计原则。因为客户端必须知道哪些具体实例实现了接口,并没有实现“封装隔离”。其实这里只是用到了接口的多态功能。

三、使用模式的情况

使用简单工厂后,类图变成了这个样子:

可以看到,有了工厂后,我们不需要知道接口的具体实现是什么,当我们要创建一个实例时,我们只要去找工厂,帮我创建一个实例就好,这样就可以做到外部调用与内部实现分离的目的。代码如下:

/**
 * @ClassName Factory
 * @Description: 其余代码和之前没有变化,只增加这样工厂类即可
 * @author Jerry
 * @date 2016年3月27日 上午10:23:30
 */
public class Factory {
	
	/** 
	* @Description: 通常把Factory当成一个工具类,不需要创建类实例,所以直接使用静态方法 
	* @param 当然可以添加参数,使得客户端可以选择自己想要初始化的实例,但不推荐,后面会解释原因  
	* @return Api  返回一个具体实现
	* @throws 
	*/
	public static Api createApi() {
		return new Impl();
	}
}
/**
 * @ClassName Client
 * @Description: 外部调用
 * @author Jerry
 * @date 2016年3月27日 上午10:13:35
 */
public class Client {

	public static void main(String[] args) {
//		Api api = new Impl();
		Api api = Factory.createApi();	//无须在客户端直接new具体实现
		api.test("最爱你的人是我,你怎么舍得我难过");
	}

}
一个简单工厂理论上可以创造任何东西,所以又称为“ 万能工厂”。简单工厂的本质在于“ 选择合适的实现类”,既然要选择,那么肯定需要用户去指定参数,通常有以下3种:
  1. 来源于客户端,指定参数。例如我们可以在创建实例的方法中加入参数,这样客户端可以传入具体参数来获得自己想要的实例。但是这样会带来一个问题,客户端必须知道每个参数的含义功能,使得向用户暴露了一定的内部实现细节。通常我们使用配置文件的写法。
  2. 来源于配置文件,从配置文件获取用于判断的值,下文会具体介绍。
  3. 来源于程序运行期的某个值,比如内存中的某个变量值,此方法属于动态实现。

使用配置文件进行优化

我们使用properties文件,放在Factory同一个包下。
ImplClass=simpleFactory.Impl
然后修改Factory类,其余不变:
/**
 * @ClassName Factory
 * @Description: 其余代码和之前没有变化,只增加这样工厂类即可
 * @author Jerry
 * @date 2016年3月27日 上午10:23:30
 */
public class Factory {
	
	public static Api createApi() {
		Properties properties = new Properties();
		InputStream in = null;
		try {
			in = Factory.class.getResourceAsStream("factory.properties");
			properties.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		Api api = null;
		try {
			//使用反射创建实例
			api = (Api) Class.forName(properties.getProperty("ImplClass")).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return api;
	}
	
	/** 
	* @Description: 通常把Factory当成一个工具类,不需要创建类实例,所以直接使用静态方法 
	* @param 当然可以添加参数,使得客户端可以选择自己想要初始化的实例,但不推荐,后面会解释原因  
	* @return Api  返回一个具体实现
	* @throws 
	*/
	@Deprecated
	public static Api createApi1() {
		return new Impl();
	}
	
}
使用配置文件的写法好处在于,可以更加便捷的更改具体实现类,无须修改代码,使得耦合性降低。

四、总结


何时选用简单工厂

  1. 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体。
  2. 想要把对外创建对象的职责集中管理和控制,因为简单工厂也称万能工厂,可以创建很多的,不相关的对象。
------------------------------------------------------------------------------------------------------------------------------------------
Reference:《研磨设计模式》

散户逆袭神器:用通达信DIY指数发现下一个光伏储能(附龙头股筛选模板) 本文详细介绍了如何利用通达信软件的自定义指数功能,构建个人专属的行业监控工具,以发现类似光伏储能这样的潜力赛道。文章提供了从零开始的指数编制步骤、核心的龙头股筛选模板,以及五个关键的数据校验技巧,帮助散户投资者实现机构级的行业分析与机会挖掘,有效提升投资决策能力。 阅读详情

相关推荐

第一节:Vben Admin介绍和初次运行

本文是【实战Vben Admin + Python】的第一节,本文内容主要是介绍Vben Admin框架和我们后端使用的技术,开发环境和工具的准备本节文章的目的是Vben Admin的简单介绍,通过配置可以让项目前端运行起来,由于项目默认开启了mock,展示的都是静态模拟数据,我们在此基础上,下一节将研究分析下Vben Admin的目录。为我们后端搭建准备。

cuiwin的专栏 7321

设计模式工厂模式

工厂模式 1、简单工厂模式 1.1、定义 简单工厂模式Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。 简单工厂是产品的工厂 1.2、应用场景 简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。 1.3、缺点 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。 不易于扩展过于复杂的产品结构。 1.4、实例 支付接口规范: public interface

aaa31203的博客 16万+

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8654

简单工厂模式

在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂模式来代替。 复杂对象指的是类的构造函数参数过多等对类的构造有影响的情况,因为类的构造过于复杂,如果直接在其他业务类内使用,则两者的耦合过重,后续业务更改,就需要在任何引用该类的源代码内进行更改,光是查找所有依赖就很消耗时间了,更别说要一个一个修改了。 工厂模式的定义: 是指定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 按实际业务场景划分,工厂模式

Charge8的博客 5301

设计模式创建型——工厂模式

工程模式是通过工厂获取一个一个的新对象。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

tszc95的博客 5678

简单工厂模式工厂模式与抽象工厂模式详解

设计模式是一套被反复使用、多数人认可的、经过分类编目的、代码设计经验的总结。它们为软件设计提供了一定的指导和最佳实践。特别是在创建对象时,简单工厂工厂模式和抽象工厂模式这三种创建型模式经常被提及和应用。简单工厂模式是一种创建型设计模式,它通过一个单一的工厂类来负责创建一系列相关的对象。这个工厂类根据传入的参数来决定实例化哪一个具体类的实例。客户端在使用时不需要知道具体的类名,只需要提供必要的信息给工厂工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

2302_77758423的博客 3846

JAVA设计模式简单工厂模式Simple Factory Pattern

一、概述 er、适用场景

小吕丶Code阶区 5306

Java设计模式—— 简单工厂模式( Simple Factory Pattern )

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或实现共同的接口。 简单工厂模式UML类图如下: 从类图可以看出,简单工厂模式包含3个要素: ...

zsx18273117003的博客 360

设计模式Java设计模式——简单工厂模式(Simple Factory Pattern)

1. 介绍 1.1 定义 简单工厂模式(Simple Factory Pattern)又称静态工厂方法,它属于创建型模式 专门定义一个工厂类负责创建其他类的实例,可以根据参数的不同返回不同类的实例,被创建的实例通常都具有相同的父类 1.2 作用 将实例的创建与实例的业务处理分开,降低系统的耦合度,即使用者可直接消费产品而不需要知道生产的细节 2. 模式结构 2.1 UML类图 2.2 模式组成 工厂(Factory):被外部调用,根据参数的不同创建不同具体产品类的实例 抽象产品(Product)

Dust_heart的博客 499

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 简单工厂模式Simple Factory Pattern) - Java实现

简单工厂模式(Simpale Factory Pattern):定义了一个工厂类,可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式

Z 828

Java 设计模式-创建型模式-简单工厂模式Simple Factory Pattern

文章目录一、模式定义二、模式动机三、模式结构四、代码实现1、普通简单工厂2、多方法简单工厂3、静态方法简单工厂五、缺点 简单工厂模式Simple Factory Pattern)不属于 GoF 的 23 种经典设计模式的范围,简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。 一、模式定义 简单工厂模式(Simple Factory Pattern)又称为静态工厂方法(Static Factory Method)模式,它属于创建型模式。提供创建对象的最佳方式。 工厂模式,顾名思义,用来

WU4566285的博客 495

java设计模式——简单工厂模式(Simple Factory Pattern)

定义:简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工            厂模 式中,可以根据参数的不同返回不同类的实例。 结构: Factory:工厂角色,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用, 创建所需的产品对象;在

yj_android_develop的博客 776

初学Java设计模式随记 -- 简单工厂模式Simple Factory Pattern

简单工厂Simple Factory模式: 又称静态工厂方法模式(Static Factory Method Pattern)。   简单工厂模式并没有被包含在GOF的23种设计模式中。 不过,在阎宏《Java模式》给出了简单工厂Simple Factory模式的定义。 它是工厂模式的一种形态。   1.用意:简单工厂模式就是有一个工厂类根据传入的参量决定创建出那一种产品类的...

louis_lee7812的专栏 272

java设计模式】【创建模式Creational Pattern简单工厂模式Simple Factory Pattern(静态工厂方法模式Static Factory Method Pattern...

1 public class Test { 2 public static void main(String[] args){ 3 try{ 4 Factory.factory("A").doSth(); 5 Factory.factory("B").doSth(); 6 Fa...

weixin_30426065的博客 100

浅谈 java 设计模式--简单工厂模式Simple Factory pattern

问题: 简单工厂模式又称静态工厂方法,是类的创建模式。 为了提高内聚(Cohesion)和松散耦合(Coupling),我们会经常抽象出一些类的公共接口以形成抽象基类和接口。简单工厂模式提供创建对象的接口,封装了对象的创建,由工厂类根据传入的参数决定创建哪一种产品类。 类图: 源代码实现: /** 工厂类*/ public class Factory{      // 静态工

ilovejava_2010的专栏 728

「聊设计模式」之简单工厂模式Simple Factory

简单工厂模式属于创建型模式,它提供了一种创建对象的方式,将对象的创建过程封装在工厂中,客户端只需要调用工厂的创建方法即可得到所需对象。简单工厂模式可以根据传入参数的不同返回不同的对象实例,这种方式属于静态工厂方法,因为它使用了静态方法来创建对象。

**My Coding Family** 986

简单工厂模式(静态工厂方法模式

概述: 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。不是23种模式中的一种,是一种编码习惯。 优点 1.工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。 2.客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。 3.通过引入配置文

weixin_49107940的博客 4088

设计模式学习之——工厂模式

设计模式学习,简单工厂模式工厂方法模式、抽象工厂模式工厂模式在spring框架中的应用,spring框架中的BeanFactoryFactoryBean

github_38727595的博客 1826

简单工厂模式 Simple Method Pattern

一、简单工厂模式 简单工厂模式不属于23中设计模式,它的缺点是增加新产品时会违背“开闭原则”。简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。 二、工厂方法模式 模式的结构 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂工厂方法 newProduct() 来创建产品。 具体工厂(Concret...

木易 771

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

一、简单工厂模式简介、 二、简单工厂模式适用场景、 三、简单工厂模式优缺点、 四、简单工厂模式代码示例、 1、抽象类、 2、子类对象 1、 3、子类对象 2、 4、工厂类、 5、测试类、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4437

独立运行小型风力发电机

研究控制系统的目的就是尽量保持系统的输出在我们希望的范围之内。在独立运行小型风力发电系统中风速和负载作为输入是不断变化的,因此系统应该通过调节来适应风速变化,满足负载需要,并使整个系统运行在安全合理的范围之内。

基于Comsol的变压器5%匝间短路电磁场瞬态分析及应用

内容概要:本文详细介绍了利用Comsol软件进行变压器5%匝间短路电磁场瞬态分析的研究方法。首先建立了变压器的二维瞬态模型,设置了绕组和铁心的关键参数,如电导率、磁导率等,并施加了适当的边界条件。然后分别模拟了正常运行和匝间短路两种状态下变压器内的电流变化曲线以及轴向、辐向磁密分布情况。结果显示,匝间短路会引起电流激增,同时改变磁场分布,特别是在短路匝附近的磁密会发生显著畸变,铁心磁密也会受到影响,可能出现饱和现象。这些发现有助于深入理解变压器故障机理,提高故障检测能力。适合人群:电气工程专业研究人员、从事电力设备维护的技术人员。使用场景及目标:适用于希望深入了解变压器内部电磁场行为及其受故障影响的专业人士;旨在提升对变压器故障诊断的理解和技术水平。其他说明:文中还提供了一些具体的Matlab和Comsol代码片段用于指导建模过程,强调了非线性磁材料设置的重要性,确保仿真的准确性。此外,特别指出在进行此类仿真时应注意网格质量,避免因网格划分不当而导致的数值误差。

上一篇: 【JAVA线程】SwingWorker的用法
下一篇: 【JAVA设计模式】外观模式(Facade Pattern)
C_son
博客等级 码龄12年 70粉丝 20原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值