工厂模式

工厂模式,我觉得这个比策略难懂。在网上看了好多帖子,先说简单工厂模式,许多人都这样说:工厂就是制造东西的吗,说白了就是制造对象,制造什么对象呢,这是你说了算的,所以你要给工厂原材料,它就能制造出相应的对象了。
2点使用原因:1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
看代码:

//想生产的抽象的东西
interface Service {
void method1();

void method2();
}
//想生产的具体的东西implementation1
class implementation1 implements Service {

public void method1() {
System.out.println("implementation1的 method1()方法");
}

public void method2() {
System.out.println("implementation1的 method2()方法");
}
}
//想生产的具体的东西implementation2
class implementation2 implements Service {

public void method1() {
System.out.println("implementation2的 method1()方法");
}

public void method2() {
System.out.println("implementation2的 method2()方法");
}
}

//工厂方法,制造你想要的东西,原材料就是你想制造什么对象。
class ServiceFactory {
public Service getService(String serviceName) {
if (serviceName.equals("implementation1"))
return new implementation1();
else if (serviceName.equals("implementation2"))
return new implementation2();

return null;
}
}
//使用
public class Apply {
public static void customer(String serviceName){
ServiceFactory sf = new ServiceFactory();
Service s = sf.getService(serviceName);
s.method1();
s.method2();
}

public static void main(String[] args) {
customer("implementation1");
customer("implementation2");
}
}

看以上代码应该很容易理解,工厂按照我传递进去的参数,给我造出相应的对象,而我的代码要是想用这些对象,只要传递进去方法的名字,就能得到相应的对象了.
而且最早提及的2点都适用了,我不能预计还有没有新的服务(新产品)了,要是有了我只要实现抽象接口,并且修改工厂方法就可以在客户端适用了。
我的对象的创建,完全不依赖于对象,而是依赖于工厂提供的方法,就算对象千变万化,我的上层代码都不用改变,因为我有稳定的供货源----工厂方法。我只是从工厂中得到了对象,具体怎么得的,我并不关心。
由此也出现了一个问题,每次我有新东西的时候,不但要遵守规范(实现接口),连工厂方法的逻辑也要改变,为了使得更符合开闭原则。需要改进

抽象工厂方法

interface Service {
void method1();

void method2();
}

class implementation1 implements Service {

public void method1() {
System.out.println("implementation1的 method1()方法");
}

public void method2() {
System.out.println("implementation1的 method2()方法");
}
}

class implementation2 implements Service {

public void method1() {
System.out.println("implementation2的 method1()方法");
}

public void method2() {
System.out.println("implementation2的 method2()方法");
}
}
//工厂的一般表现形式(抽象工厂)
interface ServiceFactory {
Service getService();
}
//制造implementation1的实际工厂
class implementation1Factory implements ServiceFactory {

public Service getService() {
return new implementation1();
}
}
//制造implementation2的实际工厂
class implementation2Factory implements ServiceFactory {

public Service getService() {
return new implementation2();
}
}

public class Apply {
public static void customer(ServiceFactory sf) {
Service s = sf.getService();
s.method1();
s.method2();
}

public static void main(String[] args) {
customer(new implementation1Factory());
customer(new implementation2Factory());
}
}


这样就好了很多,更具有通用性,尤其是

public static void customer(ServiceFactory sf) {
Service s = sf.getService();
s.method1();
s.method2();
}

这段代码,完全是虚的,都是接口的引用在其中,全部都等着你自己实例化的对象往里多态呢。
现在再扩展就好了,原来的代码都不用动了,只增加2个符合接口规范的类就行了,一个是你要的服务的,一个是产生这个服务的接口的。

总结:当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

-------------------------------------------------
开源才是王道
代码改编自:thinking in java
我的MSN:fatcatyycom@hotmail.com与我交流。
Visual Studio调试时遇到ntdll.dll的PDB文件缺失?别慌,这3个方法帮你搞定(附详细步骤) 本文详细解析了Visual Studio调试时ntdll.dll的PDB文件缺失问题,提供了3种实用解决方案:调整调试设置、配置符号服务器与缓存目录、手动下载管理符号文件。通过分步指导和高级技巧,帮助开发者快速恢复完整的调试功能,特别适用于Windows平台下的C++项目开发。 阅读详情

相关推荐

从零到一:Quartus II连接开发板实战,打通绘图、管脚分配、编译与下载全链路

本文详细介绍了使用Quartus II软件连接FPGA开发板并完成首个项目的全流程。从硬件连接到驱动安装,到绘制电路框图、精准分配管脚,再到编译设置与最终下载,手把手指导您打通从设计到硬件实现的完整链路,是FPGA初学者的实战入门指南。

mqtt6iot的博客 717

分页显示

以前总是用别人的分页,从来没有自己写过,最近自己看了看,还受到了成哥的鄙视,不过人家的鄙视无所谓,重要的是自己研究明白了。虽然自己写的不怎么样,很丑,但是原理总算是搞懂了 主要的变量有4个:curPage,pageSize,rowCount,pageCount,分别代表 1.当前是第几页 2.一页显示几条数据 3.总过多少条记录 4.总共多少页 ...

DoubleEO---爱就是性,性就是死 151

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

ArcMap:是集空间数据显示、矢量数据编辑、冲突数据检查(拓扑检查)、查询检索(地理编码)、统计(字段属性表)、报表生成、空间分析(ArcGIS Spatial Analyst)和高级制图(制图表达)等众多功能干一体的桌面应用平台软件。而且提供所见即所得的符号编辑器,令用户可以随心所欲地生成任意复杂的点、线、面符号。所支持的空间数据格式包括Arclnfo coverages、ESRI shapefiles、ArcSDE lavers、DXF、DWG、DGN、常见的图像格式、GRIDs、TINs等。

lxlmycsdnfree的博客 6565

JAVA设计模式之工厂模式(三种工厂模式)

JAVA设计模式之工厂模式(三种工厂模式)

m0_65260253的博客 2万+

给排水工程师的SWMM初体验:从软件界面到第一个简单模型的保姆级上手教程

本文为给排水工程师提供SWMM软件的保姆级上手教程,从界面解析到创建第一个简单模型,详细介绍了SWMM的核心功能和操作步骤。通过30分钟的实践指导,帮助新手快速掌握雨水管网建模的基本技能,提升工作效率。

weixin_28736355的博客 323

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.3 从零移植 busybox,基于RISC-V

上一章节我们已经成功启动了`Ubuntu`,但是由于`Ubuntu`占用系统空间过大,所以我转向占用较小的`busybox`,预计就占用`30M`左右。开始移植busybox,基于riscv64

DSMGUOGUO的博客 857

工厂模式及什么时候用工厂模式

在设计模式中,Factory   Method也是比较简单的一个,但应用非常广泛,EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子,它是最重要的模式之一.在很多地方都会看到xxxFactory这样命名的类     Factory  Method是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个

人工智能的专栏 1万+

clock min pulse width检查

高电平脉宽 = clock fall edge到达FF/CK的时间 - clock rise edge到达FF/CK的时间;低电平脉宽 = 下一T clock rise edge到达FF/CK的时间 - clock fall edge到达FF/CK的时间。而required pulse width是根据FF/CK处的transition,根据查找表计算得到的。为什么clock transition越大,会导致required pulse width越大呢?5、 降低clock上的串扰。

芯冰乐 577

工厂模式(简单工厂模式+工厂模式)

工厂模式的在没有工厂模式的时候就是,客户需要一辆马车,需要客户亲自去创建一辆马车,然后拿来用。

m0_62645012的博客 1552

2025高教社数学建模国赛A题 - 烟幕干扰弹的投放策略(完整参考论文)

摘要:本研究基于模拟遗传退火算法优化无人机投放烟幕弹策略,建立三维运动学模型分析遮蔽效果。针对不同战术场景(单机单弹至多机多弹),构建以遮蔽时间最大化为目标的非线性优化模型。通过改进遗传算法求解最优参数组合,结果显示在给定条件下单枚烟幕弹对M1导弹的有效遮蔽时长可达1.4秒。研究为无人机协同干扰提供了高效解决方案,验证了智能算法在复杂战术决策中的适用性。关键词:烟幕干扰;无人机投弹;运动学建模;时序优化;遗传算法。

ProminentWu的博客 544

【异常】XXL-JOB提示异常ERROR com.xxl.job.core.util.XxlJobRemotingUtil - connect timed out

打开XXL-JOB的ELK,发现一堆报错。

奶爸的编程之路,也就一周冷个三天 2048

工厂模式与抽象工厂模式

工厂模式 模式定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类 作用:实现了创建者和调用者的分离 详细分类:  简单工厂模式  工厂方法模式  抽象工厂模式 核心本质:  实例化对象不使用new,用工厂方法代替  将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 三种模式: ◆简单工厂模式  用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码),不满足开闭原则 ◆工厂方法模式  用来生产同一等级结构

qq_41784749的博客 1万+

[QMT和ptrade量化交易小白入门]-122、基于聚类分析的动态股票池构建与ETF轮动策略,回测年化 132.09%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1029

什么是工厂模式

  创建型设计模式中的工厂模式可以细分为三种:分别是简单工厂模式、工厂方法模式、抽象工厂模式。下面通过一些例子更加形象的理解工厂上述三种模式。 简单工厂模式 定义:在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。   简单工厂模式属于类的创建型模式,又叫做静态工厂模式。通过专门定义一个工厂类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。需要注意的是,简单工厂模式并不...

深度学习炼丹炉 3547

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式 工厂方法模式 抽象工厂模式

GeorgeGuoo的博客 2615

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式之简单工厂模式、工厂模式和抽象工厂模式

简单工厂模式、工厂模式和抽象工厂模式 1. 简单工厂模式 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式定义了一个创建对象的类,由这个类来封装实例化对象的行为。它是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式中最简单使用的模式。 简单工厂模式的三个角色 Factory(工厂角色) :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,根据调用时传入的参数,从而创建不同的对象。 Product(抽象产品角色) :简单工厂模式中所创建所有对象的父类,负责描述所以产品

JustToFaith 2169

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

简单工厂模式、工厂模式以及抽象工厂模式

工厂方法模式:工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。一、简单工厂模式:实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。具体实现如下:1. 定义一个操作接口:}2. 定义具体的操作类:// 加法计算}}// 减法计算。

m0_51797179的博客 797

工厂模式与代理工厂模式

一 ,工厂模式           工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。        由于工厂模式较为简单,就不进行详细的解释,文章中直接进行代码的演示举例,同学们有兴趣可以在这里看看...

南城渔客 3417

设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

声明: 本博客名词定义等内容和图多是参考C语言中文网。 主要记录学习以下内容: 一、简单工厂模式 二、工厂方法模式 三、抽象工厂模式 工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作放到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。 一、简单工厂模式 1.与简单工厂模式有关的基本概念 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建

yi_chengyu的博客 1720

工厂模式及简单的工厂模式详解

工厂模式 实现了创造者和调用者的分离 核心本质 实例化对象用工厂方法代替new操作 将选择实现类。创建对象统一管理和控制。从而将调用者跟我们的实现类解耦 详细分类 简单工厂模式 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中的固定产品。(支持增加任意产品) 抽象工厂模式 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持...

蔡茂的博客 1115

简单工厂模式、工厂模式、抽象工厂模式、工厂方法模式

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类,这使得创建对象的过程与使用对象的过程实现了分离。一句话概括工厂模式简单工厂:一个具体工厂类,一个产品抽象类。普通工厂:多个具体工厂类,一个产品抽象类。抽象工厂:多个具体工厂类,多个产品抽象类。生活中的工厂模式简单工厂:一个鼠标工厂,只生产鼠标(可以是不同品牌)。普通工厂:多个不同品牌的鼠标工厂,只生产鼠标。抽象工厂:多个不同品牌的 PC 工厂,即可以生产鼠标、又可以生产键盘。简单工厂模式、普通工厂模式、抽象工厂模式的关联。

干就完了!!! 1034

设计模式——工厂模式、简单工厂模式、工厂方法模式

何为工厂模式? 顾名思义就是一个工厂,只不过这个工厂是用来创建对象的。 为什么需要工厂模式? 工厂是为了客户提供已经完成的产品,所以对客户是隐藏细节的,试想,如果我们有一个客户需要一台手机,而我们能够提供iphone、华为、三星,那么关系就如下图: 使用伪代码实现如下: interface Phone{ //TODO } class iPhone implements Phone{ ...

ACE的博客 1046
上一篇: 策略模式
下一篇: IDEA建工程的技巧,页面终于不用保存和编译了
iteye_17543
博客等级 码龄8年 2粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值