当前位置: 首页 > news >正文

JAVA 设计模式 工厂

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。这种模式通过使用一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象,从而降低了代码之间的耦合度。
在工厂设计模式中,通常有三种角色:
  • 产品接口(Product):定义产品的公共接口。
  • 具体产品(ConcreteProduct):实现产品接口的具体类。
  • 工厂(Factory):负责创建产品对象的工厂类。
例:
// 产品接口
interface Shape {void draw();
}// 具体产品类:圆形
class Circle implements Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}
}// 具体产品类:矩形
class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("绘制矩形");}
}// 具体产品类:正方形
class Square implements Shape {@Overridepublic void draw() {System.out.println("绘制正方形");}
}// 工厂类
class ShapeFactory {// 根据传入的类型创建对应的产品对象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;}
}// 主类,演示工厂模式的使用
public class FactoryPatternDemo {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();// 获取圆形对象并调用其方法Shape circle = shapeFactory.getShape("CIRCLE");circle.draw();// 获取矩形对象并调用其方法Shape rectangle = shapeFactory.getShape("RECTANGLE");rectangle.draw();// 获取正方形对象并调用其方法Shape square = shapeFactory.getShape("SQUARE");square.draw();}
}
在这个示例中:
  1. Shape 是产品接口,定义了所有形状都应该实现的 draw 方法。
  2. Circle、Rectangle 和 Square 是具体的产品类,实现了 Shape 接口。
  3. ShapeFactory 是工厂类,它有一个 getShape 方法,根据传入的形状类型参数创建并返回相应的形状对象。
  4. FactoryPatternDemo 是主类,演示了如何使用工厂类来创建不同类型的形状对象,而不需要直接实例化具体的形状类。
工厂设计模式的优点包括:
  • 将对象的创建和使用分离,降低了代码之间的耦合度。
  • 提高了代码的可维护性和可扩展性,当需要添加新的产品类时,只需要修改工厂类即可。
  • 符合开闭原则,对扩展开放,对修改关闭。
工厂设计模式适用于以下场景:
  • 对象的创建过程比较复杂时。
  • 根据不同的条件创建不同类型的对象时。
  • 希望将对象的创建和使用分离时。
http://www.lryc.cn/news/587481.html

相关文章:

  • Docker搭建Redis分片集群
  • 鸿蒙应用开发: 鸿蒙项目中使用私有 npm 插件的完整流程
  • Kotlin集合接口
  • 常用的OTP语音芯片有哪些?
  • 前端性能与可靠性工程系列: 渲染、缓存与关键路径优化
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 PageHelper
  • 【React Native】环境变量和封装 fetch
  • 智源:LLM指令数据建设框架
  • VR样板间:房产营销新变革
  • Cesium 9 ,Cesium 离线地图本地实现与服务器部署( Vue + Cesium 多项目共享离线地图切片部署实践 )
  • 谷歌开源库gtest 框架安装与使用
  • VR全景制作流程?什么是全景?
  • ELK、Loki、Kafka 三种日志告警联动方案全解析(附实战 Demo)
  • EVOLVEpro安装使用教程-蛋白质语言模型驱动的快速定向进化
  • 快速搭建Maven仓库服务
  • 前端面试十二之vue3基础
  • 从代码学习深度强化学习 - DDPG PyTorch版
  • CCPD 车牌数据集提取标注,并转为标准 YOLO 格式
  • MySQL 分表功能应用场景实现全方位详解与示例
  • JavaSE-多态
  • 010_学习资源与社区支持
  • Linux713 SAMBA;磁盘管理:手动挂载,开机自动挂载,自动挂载
  • 输入npm install后发生了什么
  • C++高频知识点(十)
  • Excalidraw:一款颠覆传统思维的免费开源绘图工具
  • 什么是RAG(Retrieval-Augmented Generation)?一文读懂检索增强生成
  • Vue3 实现文件上传功能
  • 【操作系统】strace 跟踪系统调用(一)
  • 网络编程 JAVA
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 45(题目+回答)