工厂方法(Factory Method)模式定义了一个用于创建对象的接口,让子类决定实例化哪个类。它把对象的创建延迟到子类中进行,从而提高了代码的扩展性和复用性。
什么是工厂方法模式
工厂方法模式是一种常用的编程模式,它的主要思想是把对象的创建和使用隔离开来,将对象的创建交给子类实现,从而降低了代码之间的耦合性。工厂方法的核心是定义一个用于创建对象的接口,让子类来决定具体实现。
工厂方法模式有不同的类型,例如简单工厂模式、工厂方法模式、抽象工厂模式等。在 Java 中,工厂方法模式被广泛应用于面向对象编程、框架设计、组件库开发等多个领域。
工厂方法模式的使用场景
- 当客户端不需要知道具体对象时。
- 当需要实现一些通用算法,而不依赖于具体对象时。
- 当客户端需要自定义创建对象的时候。
- 当需要扩展或改变对象的创建方式时。
工厂方法模式的代码示例
下面是一个使用工厂方法模式的示例,具体步骤注释在代码中:
// 定义 Shape 接口
interface Shape {
void draw();
}
// 定义 Circle 类实现 Shape 接口
class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆形");
}
}
// 定义 Rectangle 类实现 Shape 接口
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画一个矩形");
}
}
// 定义 ShapeFactory 工厂类
class ShapeFactory {
public Shape createShape(String type) {
if (type.equalsIgnoreCase("circle")) {
return new Circle();
} else if (type.equalsIgnoreCase("rectangle")) {
return new Rectangle();
} else {
return null;
}
}
}
// 客户端使用示例
public class FactoryMethodExample {
public static void main(String[] args) {
// 创建 ShapeFactory 工厂对象
ShapeFactory factory = new ShapeFactory();
// 通过程序动态指定创建对象类型
Shape shape1 = factory.createShape("circle");
Shape shape2 = factory.createShape("rectangle");
// 调用对象的方法
shape1.draw();
shape2.draw();
}
}
在上面的示例中,Shape
接口定义了 draw()
方法,并由 Circle
和 Rectangle
类实现。ShapeFactory
工厂类在其中实现了 createShape()
方法,并根据输入字符串类型,返回对应的 Shape
类型对象。
在客户端代码中,我们执行 ShapeFactory.createShape()
方法,动态地生成了所需的 Shape
类型对象,并调用其 draw()
方法。
工厂方法模式的实际应用
在 Spring Boot 开发中,有一些常用的框架和库使用的是工厂方法(Factory Method)设计模式:
-
BeanFactory:Spring 容器中最基本的工厂,它通过反射机制来创建对象。BeanFactory 通过定义一个工厂方法来创建对象,并将对象存储在 ApplicationContext 中,供其他组件使用。
-
RestTemplate:使用 RestTemplate 可以轻松地创建 HTTP 请求,底层是通过内置的 HttpClient 来发送请求。RestTemplate 提供了多个工厂方法,例如通过 URL、URI、RequestEntity 等方式创建请求,以及通过 responseType 参数指定响应类型等。
-
JdbcTemplate:JdbcTemplate 是 Spring 对 Java JDBC 的封装,可以简单地访问数据库。JdbcTemplate 在其内部使用工厂方法来创建和配置 JDBC 模板对象,这些对象使得代码与底层的 JDBC 驱动程序透明地分离开来。
-
ObjectMapper:ObjectMapper 是 Jackson 库中的一个核心类,用于将 JSON 序列化和反序列化为 Java 对象。ObjectMapper 可以通过其工厂方法创建对象,或可以扩展 ObjectCodec 类来创建自定义的 ObjectMapper 对象。
总结
工厂方法模式是一种创建型设计模式,它提供了一种灵活的方式来创建对象,并且将对象的创建和使用分离开来,从而提高了代码的复用性和扩展性。而且,Java 语言在类的创建方面的特性,使得这种模式特别适用于库设计、框架开发和组件设计等领域。掌握了工厂方法模式的基本知识和使用方法,将能够在实际开发中更加高效、灵活地创建对象,提高程序的可维护性。
关注微信公众号:“小虎哥的技术博客”。我们会定期发布关于Java技术的详尽文章,让您能够深入了解该领域的各种技巧和方法,让我们一起成为更优秀的程序员👩💻👨💻!