工厂模式通过封装对象创建过程解耦创建与使用逻辑:先定义抽象产品接口(如Shape),再由具体类(Circle、Square)实现;简单工厂用静态方法(如getShape)隐藏new操作,工厂方法模式则将创建逻辑提升为子类实现的抽象方法。

工厂模式在 Java 中通过将对象的创建过程封装到专门的工厂类中来实现,避免客户端直接使用 new 关键字创建具体类实例,从而解耦对象创建与使用逻辑。
定义抽象产品接口或父类
这是工厂模式的基础。所有具体产品类都需实现该接口或继承该类,确保工厂返回的对象具有一致的行为契约。
- 例如定义一个
Shape接口,包含draw()方法 - 具体类如
Circle、Square实现该接口 - 接口不关心“怎么画”,只约定“能画”
编写具体产品类
每个具体类负责自身逻辑,不涉及创建逻辑。它们是工厂要生成的目标对象。
-
Circle的draw()输出 “Drawing a circle” -
Square的draw()输出 “Drawing a square” - 新增
Rectangle时,只需新增类和实现,不修改已有工厂代码
创建简单工厂类(非 GoF 标准但常用)
用静态方法根据参数返回对应产品实例,隐藏 new 操作。
立即学习“Java免费学习笔记(深入)”;
- 工厂类如
ShapeFactory提供getShape(String type) - 内部用
if-else或switch判断类型并new对应对象 - 客户端调用
ShapeFactory.getShape("circle")即可获得对象,无需知道构造细节
升级为工厂方法模式(GoF 标准)
当产品族扩展频繁或需要子类控制实例化时,把工厂逻辑提升为抽象方法,由子类决定创建哪个对象。
- 定义抽象工厂类
ShapeFactory,声明抽象方法createShape() - 子类
CircleFactory重写该方法,返回new Circle() - 客户端面向抽象工厂编程,运行时注入具体工厂,更易扩展和测试


















