设计模式-工厂模式

【设计模式】工厂模式 上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品(AbstractProduct),如果要生成另一种产品PC,应该怎么表示呢?最简单的方式是把2中介绍的工厂方法模式完全复制一份,不过这次生产的是PC。但同时也就意味着我们要完全复制和修改图片生产管理的所有代码,显然这是一个笨办法,并不利于扩展和维护。抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。 阅读详情

工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。封装性好,通过简单工厂,实现了客户端和具体实现类的解耦。

分类

1)简单工厂模式(Simple Factory):不利于产生系列产品;
2)工厂方法模式(Factory Method):又称为多形性工厂;
3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;
GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

工厂方法模式(包含简单工厂模式)

简单工厂模式又称静态工厂方法模式。从命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。
 先来看看它的组成:
a) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。在java中由接口或者抽象类来实现。工厂类在客户端的直接控制下(Create,LightSimpleFactory方法)创建产品对象。
b) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。
c) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。定义工厂具体加工出的对象。
优点:
工厂类可以决定创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。实现了对责任的分割。
缺点:
工厂类集中了所有产品创建逻辑,一旦工厂不能正常工作,整个系统都要受到影响。
系统扩展困难,一旦添加新产品就不得不修改工厂逻辑(生产线)。

工厂类角色:
public class LightSimpleFactory {
	 public Light create(String lightType){
	      if(lightType == "red")
	         return new RedLight();
	      else if(lightType == "green")
	         return new GreenLight();
	      else
	         return null;
	   }
}

抽象产品角色:
public interface Light {
	public abstract void turnOn();

	public abstract void turnOff();
}

具体产品角色:

public class RedLight implements Light {

	@Override
	public void turnOff() {
		System.out.println(" red light turn off");
	}

	@Override
	public void turnOn() {
		System.out.println(" red light turn on");
	}
	
}

public class GreenLight implements Light {

	@Override
	public void turnOff() {
		System.out.println(" green light turn off");
	}

	@Override
	public void turnOn() {
		System.out.println(" green light turn on");
	}

}

客户端:
public class Test {

	public static void main(String[] args) {
		LightSimpleFactory lightSimpleFactory= new LightSimpleFactory();
		Light redRight = lightSimpleFactory.create("red");
		redRight.turnOn();
		redRight.turnOff();
		Light greenRight = lightSimpleFactory.create("green");
		greenRight.turnOn();
		greenRight.turnOff();
//		print
//		 red light turn on
//		 red light turn off
//		 green light turn on
//		 green light turn off

	}
}

抽象工厂模式

a)抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
b)具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
c)抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
d)具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

抽象工厂
public interface ILightFactory {
	public Light creat();
}

具体工厂

public class RedLightFactory implements ILightFactory {
	@Override
	public Light creat() {
		return new RedLight();
	}
}

public class GreenLightFactory implements ILightFactory {
	@Override
	public Light creat() {
		return new GreenLight();
	}
}

抽象角色
public interface ILight {
	public abstract void turnOn();

	public abstract void turnOff();
}

具体角色
public class RedLight implements ILight {

	@Override
	public void turnOff() {
		System.out.println(" red light turn off");
	}

	@Override
	public void turnOn() {
		System.out.println(" red light turn on");
	}
	
}

public class GreenLight implements ILight {

	@Override
	public void turnOff() {
		System.out.println(" green light turn off");
	}

	@Override
	public void turnOn() {
		System.out.println(" green light turn on");
	}
}

客户端

public class Test {

	public static void main(String[] args) {
		ILightFactory redLightFactory= new RedLightFactory();
		RedLight redLight = (RedLight) redLightFactory.creat();
		redLight.turnOn();
		redLight.turnOff();

		ILightFactory greenLightFactory= new GreenLightFactory();
		GreenLight greenLight = (GreenLight) greenLightFactory.creat();
		greenLight.turnOn();
		greenLight.turnOff();
//		 red light turn on
//		 red light turn off
//		 green light turn on
//		 green light turn off

	}
}



public class RedLightFactory implements ILightFactory {
	@Override
	public Light creat() {
		return new RedLight();
	}
}

public class GreenLightFactory implements ILightFactory {
	@Override
	public Light creat() {
		return new GreenLight();
	}
}

Dify 深度进阶:从入门到精通AI应用构建 《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。 阅读详情

相关推荐

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2680

Java设计模式——工厂模式

本文对设计模式中工厂模式进行思想和原理的讲解,引用实际例子来方便理解。

weixin_56032340的博客 8632

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

设计模式之工厂模式

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

aaa31203的博客 16万+

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2051

【现代信号处理】01 -概率论与随机过程回顾

概率论与随机过程回顾 文章目录概率论与随机过程回顾1. 统计模型的相关概念1.1 统计实验(不确定性)1.2 样本点1.3 样本空间Ω1.4 概率1.5.统计模型是先验的2. 概率和统计的差异2.1 联系2.2 差异2.3.1 概率和统计问题的三要素2.3.1.1 model-模型2.3.1.2 data-数据2.3.1.3 decision-决策2.3.2 关系图3. 样本空间的重要性3.1 贝朗特悖论3.1.1 解法一3.1.2 解法二3.1.3 解法三3.2 结论4.概率相关的概念4.1 随机变量4.

qq_41741344的博客 1405

设计模式之【工厂模式】详解

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

Shine19的博客 1143

YOLOv8改进策略【独家融合改进】| StarNet + 小目标检测头,加强跨尺度的上下文特征融合,提高小目标检测能力

P3/8 - small检测头原始模型中的P3/8特征层对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。适合检测尺寸大概在8x8到32x32像素左右的目标。P4/16 - medium检测头这个检测头对应的P4/16特征层经过了更多的下采样操作,相比P3/8特征图空间分辨率降低,但通道数增加,特征更抽象且有语义信息。它主要用于检测中等大小的目标,尺寸范围大概在32x32到64x64像素左右。P5/32 - large检测头P5/32。

Limiiiing的博客 636

工厂设计模式

简单工厂模式(静态工厂模式)虽然不符合设计原则,但是使用方便,实际使用最多工厂方法模式不修改已有类的前提下,通过增加新的工厂类实现扩展抽象工厂模式不可以增加产品,但可以增加产品族应用场景JDK中Calendar的getInstance方法JDBC中的Connection对象的获取Spring中IOC容器创建管理的bean方法反射中Class对象的newInstance方法。

学习总结 1484

学Simulink——十二脉波整流电路(移相变压器)谐波抵消仿真

Y:Δ = 1:√3(若 DC 同压)— 此处同相电压故 220V(Y)=220V(Δ phase)Y(相电压=220V)、Δ(线电压=380V ⇒ 相=220V,30° 移相)可经 Lbal​=0.5mH(平衡电抗)或直接短(大 L_dc 下均流尚可)✅ 直流输出纹波频率 = 12·f_line(vs 6·f_line)直流输出 → Ldc​=50mH→Cdc​=2200µF→R=30Ω。Line‑Line RMS = 380 V(⇒ 相=220V)Vdc​≈1.35⋅380≈513V(同 6‑脉波)

xiaoheshang_123的博客 59

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

设计模式——工厂模式

工厂模式 在《Head First 设计模式》一书中,一共介绍了一种类似于工厂模式的编程习惯、两种工厂模式,在这篇文章中,我将对它们分别进行介绍,下面首先来看一下简单工厂。 1、简单工厂 按照惯例,我们应该先介绍一下简单工厂的定义,然后举例说明,这一次,我们不这样做,我们首先举例说明,然后再引出简单工厂的定义,后续两个工厂模式均按此方式进行叙述,从案例中理解模式的定义才能够更加印象深刻。...

记录只为更好地前行 4883

Muse Spark:功能、性能测试及使用方法

对于一个仅用九个月时间从零开始重建的团队来说,这样的健康状况和多模态测试结果无疑是迈出了坚实的第一步,并且经受住了独立测试的考验。Muse Spark 为每个产品确定了最重要的主题(A 产品的发布策略、B 产品的定价策略、C 产品的规模化策略),并提出了切实可行的具体行动方案。抽象视觉推理也遵循同样的模式:Muse Spark 的 ARC-AGI-2 得分为 42.5,而 GPT-5.4 和 Gemini 的得分都在 70 分左右。他的离职是由于组织结构的变化限制了他的角色,以及团队转向闭源开发。

xiaoshun007的专栏 123

【设计模式】之工厂模式(三种)

今天给大家介绍23种设计模式中的工厂模式,学过Spring的小伙伴应该不陌生,今天给大家详细介绍一下它。🌈

小杰不秃头的博客 2323

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式之工厂模式与抽象工厂模式

工厂模式和抽象工厂模式 在设计模式里面,我们发现了其实工厂模式贺抽象工厂模式是单独分开的两个设计模式,接下来我们去探索一下他们呢得不同之处叭! 工厂模式的分类: 简单工厂模式 用来生产同一等级结构中得任意产品(对于增加新得产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中得固定产品(支持增减任意产品) 抽象工厂模式 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂得工厂 核心本质 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象同意管理和控制

qq_43325476的博客 2399

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【设计模式】工厂设计模式

1.简单工厂设计模式 代码 Video package Factory.简单工厂; public abstract class Video { public abstract void product(); } JavaVideo package Factory.简单工厂; public class JavaVideo extends Video { public voi...

codeDonald的博客 222

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

《C#设计模式》 工厂三兄弟之 【简单工厂模式】,【工厂方法模式】,【抽象工厂模式】

《C#设计模式》 三种工厂设计模式 【简单工厂模式】 【工厂方法模式】 【抽象工厂模式】 第一种:简单工厂模式 一:【简单工厂模式】 简单工厂模式概念(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简...

TimTiny的博客 2590

【iOS】——工厂设计模式

这种模式旨在为创建对象提供一个统一的接口,隐藏了创建对象的具体逻辑,使得客户端不需要知道所创建对象的具体类,从而降低了对象之间的耦合度,提高了代码的灵活性和可维护性。它为创建对象提供了一种灵活的方式,让子类来决定实例化哪一个类,从而实现了对象创建的延迟化和抽象化,增强了代码的扩展性和可维护性。车没了,该车的引擎和轮胎自然也没了。当系统中加入新产品时,不需要修改抽象工厂和抽象产品提供的接口,也无须修改客户端和其他的具体工厂和具体产品,而只要添加一个具体工厂和与其对应的具体产品就可以了,符合了“开-闭”原则。

m0_73974920的博客 1675

【深入理解设计模式】 工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的接口。在工厂设计模式中,我们定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

guojiaqi_的博客 1559

设计模式—工厂设计模式

工厂设计模式1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景5.扩展模式5.1 第一步:定义配置文件5.2 改写工厂类6.JDK源码解析—Collection.iterator方法 1.概述 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需

洛晓关的博客 1462
上一篇: java基础学习-注解
下一篇: 设计模式-装饰模式
巴狼
博客等级 码龄12年 0粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值