在软件开发过程中,对象的创建是一个基础且频繁的操作。然而,直接在代码中使用 new
关键字创建对象,会使代码的耦合度增加,不利于代码的维护与扩展。工厂模式作为一种创建型设计模式,巧妙地解决了这一问题。它将对象的创建和使用分离,使得代码结构更加清晰,可维护性和可扩展性大幅提升。本文将深入探讨工厂模式的概念、类型及应用场景。
一、工厂模式的基本概念
工厂模式提供了一种创建对象的方式,将对象的创建逻辑封装在一个工厂类中,而不是在客户端直接实例化对象。这样,当对象的创建逻辑发生变化时,只需修改工厂类,而无需修改所有使用该对象的客户端代码。
例如,假设我们正在开发一个图形绘制程序,需要绘制圆形、矩形等图形。如果不使用工厂模式,客户端代码可能如下:
// 圆形类
class Circle {
public void draw() {
System.out.println("绘制圆形");
}
}
// 矩形类
class Rectangle {
public void draw() {
System.out.println("绘制矩形");
}
}
// 客户端代码
public class ClientWithoutFactory {
public static void main(String[] args) {
Circle circle = new Circle();
circle.draw();
Rectangle rectangle = new Rectangle();
rectangle.draw();
}
}
在上述代码中,客户端直接负责创建 Circle
和 Rectangle
对象。若后续图形的创建逻辑变得复杂,或者需要添加新的图形类型,客户端代码将不得不进行大量修改。
而使用工厂模式后,对象的创建将由工厂类负责,客户端只需向工厂请求所需的对象,代码结构更加清晰,易于维护。
二、工厂模式的类型
2.1 简单工厂模式
简单工厂模式虽然不属于 GOF(Gang of Four,设计模式四人组)定义的 23 种设计模式之一,但它是工厂模式的基础。简单工厂模式有一个工厂类,负责创建对象。以下是简单工厂模式的实现示例:
// 图形抽象类
abstract class Shape {
public