工厂模式 - 代码理解

深入理解工厂模式:利用反射机制的Java代码实践 工厂模式是一种对象创建模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。这种类型的设计模式属于创建型模式。Java反射机制是Java语言中一个非常重要的特性,它允许程序在运行时访问和操作类的内部信息。通过反射,Java程序能够在执行期间发现和修改类的行为,这是许多高级框架和库所依赖的关键机制。本章我们将深入探讨反射机制的基础知识及其使用场景。 阅读详情

目录

1、工厂模式 -- 用来创建对象

2、Demo代码实现

步骤 1

步骤 2

步骤 3

步骤 4

步骤 5

3、总结



1、工厂模式 -- 用来创建对象

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


2、Demo代码实现

我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。

FactoryPatternDemo,我们的演示类使用 ShapeFactory 来获取 Shape 对象。它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。

工厂模式的 UML 图

步骤 1

创建一个接口:

Shape.java

public interface Shape {
   void draw();
}

步骤 2

创建实现接口的实体类。

Rectangle.java

public class Rectangle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

步骤 3

创建一个工厂,生成基于给定信息的实体类的对象。

ShapeFactory.java

public class ShapeFactory {
    
   //使用 getShape 方法获取形状类型的对象
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }        
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      return null;
   }
}

步骤 4

使用该工厂,通过传递类型信息来获取实体类的对象。

FactoryPatternDemo.java

public class FactoryPatternDemo {
 
   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();
 
      //获取 Circle 的对象,并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
 
      //调用 Circle 的 draw 方法
      shape1.draw();
 
      //获取 Rectangle 的对象,并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
 
      //调用 Rectangle 的 draw 方法
      shape2.draw();
 
      //获取 Square 的对象,并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
 
      //调用 Square 的 draw 方法
      shape3.draw();
   }
}

步骤 5

执行程序,输出结果:

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.

 


3、总结

  • 工厂模式:提供一个工厂,这个工厂可以生产某一类事物的多种对象,用户只需要知道想要什么对象,告诉工厂之后,工厂造好了就把该类型的对象返回给用户。
  • 关于工厂模式的其他特点:https://www.runoob.com/design-pattern/factory-pattern.html
三种工厂模式的代码示例 三种工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)的代码示例。工厂模式的详细解说参见:http://blog.youkuaiyun.com/H28496/article/details/44258601 立即下载

相关推荐

工厂模式代码实现

简单工厂,工厂模式,抽象工厂示例代码

代码的工厂模式

代码的工厂模式

Good_go的博客 517

工厂模式(代码)

工厂模式工厂模式工厂模式

简单工厂代码

import java.text.DateFormat; import java.text.NumberFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; import org.junit.Test; /** *--------唯有专注才能深入,唯有厚积才会薄发--------- * 本类介绍: * @author : 木木老师 * @Time :...

wdw18668109050的博客 664

【探秘】二维异形件重叠移除算法:从度量到消除的实战解析

本文深入解析二维异形件重叠移除算法的核心技术与实战应用,涵盖重叠度量、零件扰动策略及消除方法。通过NFP(临界多边形)技术、空间分区加速等优化手段,有效解决异形件排版中的重叠问题,提升材料利用率和计算效率。适合制造业、CAD软件开发者及算法工程师参考。

weixin_28698059的博客 253

AS7341光谱传感器实战:如何用STM32F103精准测量环境色温(附完整代码)

本文详细介绍了如何使用STM32F103驱动AS7341光谱传感器实现环境色温的精准测量。从硬件连接到驱动开发,再到色温计算算法的实现,提供了完整的代码示例和优化建议,帮助开发者在智能照明、农业监测等领域快速应用AS7341进行高精度色温检测。

weixin_30352645的博客 478

简单工厂模式代码示例

一. 抽象接口INoodles: package designpattern.factory.simplefactory.noodles; public interface INoodles { /** * 描述每种面条啥样的 */ public abstract void desc(); } 二. 接口实现类: LzNoodles: package designpattern.factory.simplefactory.noodles; public

舞鹤白沙编码日志 1741

抖音a_bogus参数逆向避坑指南:从环境检测到XHR请求的全流程解析

本文详细解析了抖音a_bogus参数在v1.0.1.19版本下的逆向工程全流程,重点介绍了如何通过PyV8Env框架进行有效的补环境操作,以绕过严格的环境检测。内容涵盖从环境初始化、关键事件触发到模拟XHR请求获取签名的完整步骤,并提供了可运行的Python代码示例和常见检测点的避坑指南,帮助开发者稳定生成有效的a_bogus参数。

tech5的博客 602

工厂模式:具体看源代码

工厂模式 源代码:https://gitee.com/qplo/design-pattern/tree/master/src/main/java/com 作用: 实例化对象不使用new,用工厂方法代替。实现了调用者和创建者的分离 详细分类 简单工厂模式 工厂方法模式 抽象方法模式 简单工厂模式 简单工厂模式,也叫静态工厂模式,对象的创建交给工厂 public class CarFactory { //方法一 public static Car getCarName

dekudekuku的博客 203

GSM的“时间管理大师”:TDMA时隙、突发脉冲与逻辑信道映射实战图解

本文深入解析GSM网络中的TDMA时隙调度与逻辑信道映射技术,揭示2G网络如何通过精密的时间管理和突发脉冲设计实现高效通信。从TDMA帧结构到GMSK调制优化,详细介绍了GSM的工程艺术及其在现代通信中的延续价值。

weixin_30631587的博客 514

四大AI编程工具深度对比:Claude Code、Codex、OpenCode与WorkBuddy选型指南

AI编程助手正从代码补全走向自主执行的智能体形态,其核心原理是通过“规划-执行-观察”循环让模型自主完成文件修改、命令运行与错误修复。这类工具的技术价值在于提升长任务连续性与上下文理解能力,同时通过自定义指令与技能机制沉淀团队规范,适应不同工程场景。在实际选型中,开发者常面临终端CLI与图形化工作台、模型开放程度与绑定生态之间的权衡:Claude Code强调深度Agent体验,Codex支持灵活接入OpenAI兼容模型,OpenCode以开源多模型见长,WorkBuddy则提供全流程集成环境。本文基于真实

weixin_42526166的博客 136

工厂模式:简单工厂知多少?原理、示例代码、场景及优缺点?

工厂模式中,另一种用得很多的模式是简单工厂模式,直奔主题。一、简单工厂原理、示例代码简单工厂模式是一种创建型设计模式,它提供了一个统一的接口来实例化一组相关或相似的对象,而无需暴露对象的创建逻辑。在简单工厂模式中,客户端通过向工厂类传递参数来获取所需的对象实例,而无需直接调用对象的构造函数。// 定义一个抽象的产品类public:// 具体产品类Apublic:// 具体产品类Bpublic:// 简单工厂类public:// 根据传入的参数创建相应的产品实例。

十年以上编程经验的干货分享 1485

Python实战:解析腾讯视频M3U8加密链接并下载高清影片

本文详细介绍了如何使用Python解析腾讯视频M3U8加密链接并下载高清影片。从环境准备、抓包分析到核心代码实现,逐步讲解如何获取M3U8主链接、解析TS分片列表以及下载合并视频片段。文章还提供了多线程下载、断点续传和加密视频处理等优化方案,帮助开发者高效完成视频下载任务。

weixin_30836759的博客 525

代码理解工厂模式【1】

在这个例子中,DocumentFactory是一个简单工厂,它根据传入的字符串参数决定创建哪种类型的文档对象。⼯⼚类集合了所有产品的创建逻辑,职责过重,同时新增⼀个产品就需要在原⼯⼚类内部添加⼀个分⽀,违反了开闭原则。在创建对象时,不会对客户端暴露对象的创建逻辑,⽽是通过使⽤共同的接⼝来创建对象。如果现在又有新产品进来,实现完产品后还要到简单工厂加入对应的逻辑代码,如果有很多新产品,那么这样的处理是不是太麻烦?⼀般情况下,⼯⼚模式分为三种更加细分的类型:简单⼯⼚、⼯⼚⽅法和抽象⼯⼚。

东篱君的博客 602

一次点击跑通:用 Postman 自动获取并携带 CSRF token,测试 SAP OData 写操作

SAP OData 写操作自动化测试方案 针对 SAP Gateway OData 服务写操作中常见的 CSRF token 验证问题,本文提出了一套基于 Postman 的自动化解决方案: 问题分析:解释了 CSRF token 的验证机制及其必要性,说明手工测试效率低下的原因 解决方案: 使用 Postman 环境变量存储 token 通过脚本自动获取并传递 token 利用 Collection Runner 实现一键执行 实施步骤: 创建环境变量存储 token 第一个请求获取 token 并存入变

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 308

YOLOv11改进 | Conv篇 | 图像去雾卷积DEConv助力yolov11有效涨点(部署零额外开销)

本文介绍了一种最新改进机制用于低层视觉任务的细节增强卷积(DEConv)机制。DEConv在训练阶段采用"普通卷积+差分卷积"的多分支并联结构,增强网络对边缘、纹理等细节特征的学习能力;在推理阶段可折叠为标准3×3卷积,保持与普通卷积相同的计算效率。文中详细阐述了DEConv的工作原理、实现方法以及在YOLOv11中的应用步骤,包括核心代码解析、模型修改方法和训练配置。实验表明,该机制在去雾、去噪、超分等强调细节重建的任务中具有显著优势。文章还提供了完整的代码实现和训练指导.

Snu77的博客 2438

纯手写理解设计模式代码之工厂模式

抽象工厂模式属于创建型模式: 纯手写 package com.demo.abstractFactory; /** * 抽象工厂模式 * 创建型设计模式 * 就是将一类相同类型的产品抽象为产品族 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂 * 这样生产这一产品系列的对象效率大大提升 * 抽象工厂和方法工厂的对比: * 工厂方法适用产生单一产品 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点: * 例如在AbstractFactoryFruit下需要多

疯人愿 518

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PHP 单例模式 工厂模式 策略模式代码理解

//单个类 单例 /** *单例模式:一个类只能有一个对象 *三私一公 */ class MySQLDB { private static $instance; //私有的成员用来保存类的实例 private function __construct() { //私有的构造函数阻止在类的外部实例化 } private function __clone() { //私有的

tianjin1986lin的专栏 1569

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

抽象工厂模式 - 代码理解

目录 1、抽象工厂模式 -- 创建对象 2、代码 3、总结 1、抽象工厂模式 -- 创建对象 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 2、代码 限于篇幅,直接参考文章:https://www.runoob...

Longtermevolution的博客 516

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

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

学习型工厂模式构建的理解(代码说明)

以自己的理解写了一下学习型工厂

luochao_tangjiao的专栏 389

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

工厂模式(Factory Pattern)是一种创建型设计模式,旨在提供一种统一的方式来创建对象,将对象的实例化过程封装在一个单独的类中。工厂模式通过定义一个公共的接口来创建对象,但允许子类决定实例化哪个类。这样可以将对象的实例化与客户端代码的耦合度降到最低,同时也提供了一种可扩展的方式来创建对象。

qq_45929019的博客 1724

工厂模式理解(示例代码)

设计模式——简单工厂模式-优快云博客

m0_51386664的博客 177

由浅入深理解工厂模式(代码版+脑图解析)

一 简单工厂模式 实现方式 一个接口 多个实现类 一个工厂类(用来实例化抽象的接口) 一个接口 public interface Car { public void run(); public void stop(); } 实现类(可以有多个) public class Benz implements Car{ @Override public void run() { // TODO Au...

qq_43614498的博客 230

设计模式---工厂模式的理解(代码实现+UML类图)

不用自己创建对象,把创建对象的过程交给了工厂去完成,简单方便。就是对象的创建者和调用者进行了一个分离。调用者不需要知道对象如何建立的。

qq_45973897的博客 449

Spring的bean的生命周期的核心代码实现的理解,及Spring使用的工厂模式

在Spring中,BeanFactory就是一个典型的工厂方法模式的实现,它是通过xml配置文件或注解来定义bean的创建和管理,并且可以根据需要创建不同的BeanFactory实现类。在Spring中,BeanFactory接口就是抽象工厂模式的实现,它定义了创建和管理bean的方法,并且可以通过不同的实现类提供不同的创建逻辑。1、实例化阶段:在这个阶段,Spring容器会根据配置文件中的信息,通过反射机制创建bean的实例。3、初始化阶段:在这个阶段,Spring容器会调用bean实例的初始化方法。

qq_38366111的博客 452

从零理解工厂模式:对象创建的灵活设计与代码解耦实践

经过第五点和第六点的学习,想想,spring 框架里 其实只有一个工厂,那就是BeanFactory,ApplicationContext 也需要用它来创建对象。那如何去写一个针对多个接口实现一个公共的工厂类呢?体验AI代码助手代码解读复制代码/** * 针对多个接口实现一个公共的工厂类 */ public <T> Object getObject(Class<T> clazz) { if (clazz == null ) { return null;

2401_87878486的博客 391
上一篇: java 设计模式总结 - 简介
下一篇: 抽象工厂模式 - 代码理解
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值