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

【设计模式】基于 Java 语言实现工厂模式

目录

一、简单工厂模式

1.1 简单工厂模式的介绍

二、工厂方法模式

2.1 工厂方法模式的介绍

2.2 工厂方法模式的基本实现

2.3 工厂方法模式的应用场景

三、抽象工厂

3.1 抽象工厂的概念

3.2 抽象工厂的基本结构

3.3 抽象工厂的基本实现

3.4 抽象工厂的应用场景

四、工厂模式的总结

4.1 工厂模式优点和缺点

4.2 工厂模式的适用场景

4.2.1 线程工厂(ThreadFactory)

4.2.2 Bean 工厂(FactoryBean)


工厂模式是一种创建型设计模式,它提供了一种封装对象实例化过程的方法,使客户端无需了解具体的实现细节即可获得所需的对象。通过定义一个用于创建对象的接口(工厂),让子类决定具体实例化哪一个产品类,从而使得代码在应对变化时更加灵活且易于扩展。

通俗地讲,工厂模式的本质就是用工厂方法,代替 new 操作创建一种实例化对象的方式。

一、简单工厂模式

1.1 简单工厂模式的介绍

简单⼯⼚模式是⼀种创建型设计模式,但并不属于23种设计模式之⼀,更多的是⼀种编程习惯。

简单⼯⼚模式的核⼼思想:将产品的创建过程封装在⼀个⼯⼚类中,把创建对象的流程集中在这个⼯⼚类⾥⾯。

简单⼯⼚模式的角色:

  1. 抽象产品:描述产品的通⽤⾏为,通常由一个 Java 接口或一个 Java 抽象类定义。

  2. 具体产品: 实现抽象产品接⼝或继承抽象产品类。

  3. ⼯⼚类:负责创建产品,根据传递的不同参数创建不同的产品示例。

简单⼯⼚类简化了客户端操作,客户端可以调⽤⼯⼚⽅法来获取具体产品,⽽⽆需直接与具体产品类交互,降低了耦合,但是有⼀个很⼤的问题就是不够灵活,如果需要添加新的产品,就需要修改⼯⼚类的代码。

简单工厂的缺点:单⼯⼚模式只有⼀个⼯⼚类,负责创建所有产品,如果要添加新的产品,通常需要修改⼯⼚类的代码。

二、工厂方法模式

2.1 工厂方法模式的介绍

⼯⼚⽅法模式也是⼀种创建型设计模式:⼯⼚⽅法模式引⼊了抽象⼯⼚和具体⼯⼚的概念,每个具体⼯⼚只负责创建⼀个具体产品,添加新的产品只需要添加新的⼯⼚类⽽⽆需修改原来的代码,这样就使得产品的⽣产更加灵活,⽀持扩展,符合开闭原则。

⼯⼚⽅法模式分为以下⼏个⻆⾊:

  • 抽象⼯⼚:⼀个接⼝,包含⼀个抽象的⼯⼚⽅法(⽤于创建产品对象)。

  • 具体⼯⼚:实现抽象⼯⼚接⼝,创建具体的产品。

  • 抽象产品:定义产品的接⼝。

  • 具体产品:实现抽象产品接⼝,是⼯⼚创建的对象。

2.2 工厂方法模式的基本实现

// 抽象产品
interface Shape {void draw();
}// 具体产品 - 圆形
class Circle implements Shape {@Overridepublic void draw() {System.out.println("Circle");}
}// 具体产品 - 正⽅形
class Square implements Shape {@Overridepublic void draw() {System.out.println("Square");}
}// 抽象⼯⼚
interface ShapeFactory {Shape createShape();
}// 具体⼯⼚ - 创建圆形
class CircleFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Circle();}
}
// 具体⼯⼚ - 创建正⽅形
class SquareFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Square();}
}
/

相关文章:

  • 替换word中的excel
  • OpenCV 第6课 图像处理之几何变换(重映射)
  • 水利数据采集MCU水资源的智能守护者
  • numpy数组的复数和时间的操作
  • 软考软件评测师——黑盒测试测试方法
  • vscode 常用调试
  • Linux中的 I/O 复用机制 select
  • win11下docker 的使用方案
  • 信奥赛-刷题笔记-栈篇-T2-P1165日志分析0519
  • AI大模型应用微调服务商分享:微调技术Lora和SFT的异同
  • 从JSON中提取任意位置键对应值的几种Python方法
  • 机器学习 集成学习方法之随机森林
  • MySQL——基本查询内置函数
  • matlab慕课学习3.4
  • 跟踪AI峰会,给自己提出的两个问题。
  • Windows系统下MySQL 8.4.5压缩包安装详细教程
  • 如何使用通义灵码辅助开发鸿蒙OS - AI编程助手提升效率
  • centos7安装mysql8.0
  • 基于PyTorch的医学影像辅助诊断系统开发教程
  • 【Linux】初见,基础指令
  • 建行原副行长章更生涉嫌受贿罪、违法发放贷款罪被逮捕
  • 渝昆高铁云南段路基土石方工程已完成97%,桥隧施工完成超90%
  • 杭州3宗住宅用地收金42.49亿元,最高溢价率51.38%
  • 王楚钦球拍受损,乒乓球裁判揭秘大赛球拍检测
  • 小米法务部:犯罪团伙操纵近万账号诋毁小米,该起黑公关案告破
  • 武汉警方通报一起故意伤害案件:1人死亡,嫌疑人已被抓获