一、为什么要学习工厂方法模式?

在软件开发中,对象创建是最常见的操作之一。当我们需要创建的对象类型存在多种可能,或者对象的创建过程较为复杂时,如果直接在业务代码中使用new关键字进行实例化,会导致以下问题:

代码耦合度高

难以扩展新的产品类型

违反开闭原则(对扩展开放,对修改关闭)

代码重复和可维护性差

工厂方法模式(Factory Method Pattern)正是为了解决这些问题而诞生的经典设计模式。它被广泛应用于Spring、Hibernate等主流框架中,是Java开发者必须掌握的核心设计模式之一。

二、工厂方法模式核心概念

2.1 模式定义

工厂方法模式定义一个用于创建对象的接口,但让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类。

2.2 模式结构

抽象产品(Product):定义产品的接口

具体产品(ConcreteProduct):实现抽象产品接口的具体类

抽象工厂(Creator):声明工厂方法,返回Product类型对象

具体工厂(ConcreteCreator):重写工厂方法,返回具体产品实例

2.3 UML类图

+----------------+ +-------------------+

| Product | | Creator |

+----------------+ +-------------------+

| +use(): void |<-------| +factoryMethod() |

+----------------+ +-------------------+

^ ^

| |

+-----------------+ +-------------------+

| ConcreteProduct | | ConcreteCreator |

+-----------------+ +-------------------+

| +use(): void | | +factoryMethod() |

+-----------------+ +-------------------+

三、完整代码示例:数据库连接工厂

3.1 场景说明

假设我们需要创建不同类型的数据库连接(MySQL、PostgreSQL),要求:

方便扩展新的数据库类型

客户端代码与具体数据库实现解耦

统一的连接创建接口

3.2 代码实现

步骤1:定义产品接口

public interface Connection {

void connect();

void executeQuery(String query);

}

步骤2:实现具体产品

public class MySQLConnection implements Connection {

@Override

public void connect() {

System.out.println("Connected to MySQL database");

}

@Override

public void executeQuery(String query) {

System.out.println("Executing MySQL query: " + query);

}

}

public class PostgreSQLConnection implements Connection {

@Override

public void connect() {

System.out.println("Connected to PostgreSQL database");

}

@Override

public void executeQuery(String query) {


情欲与刑罚:清前期奸淫案件的历史解读
手机怎么使用蓝牙音箱