1. 工厂方法模式 (Factory Method Pattern)
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
核心思想:让子类来决定创建哪个具体对象,而不是在父类中直接指定。
场景:当一个类不知道它所必须创建的对象的类的时候。
实例代码:假设我们要创建一个生产不同类型汽车的系统。
java
// 1. 产品接口 (Product)
interface Car {
void drive();
}
// 2. 具体产品 (Concrete Product)
class SedanCar implements Car {
@Override
public void drive() {
System.out.println("Driving a Sedan Car.");
}
}
class SUVCar implements Car {
@Override
public void drive() {
System.out.println("Driving an SUV Car.");
}
}
// 3. 抽象工厂 (Creator)
interface CarFactory {
Car createCar();
}
// 4. 具体工厂 (Concrete Creator)
class SedanCarFactory implements CarFactory {
@Override
public Car createCar() {
System.out.println("Creating a Sedan Car...");
return new SedanCar();
}
}
class SUVCarFactory implements CarFactory {
@Override
public Car createCar() {
System.out.println("Creating an SUV Car...");
return new SUVCar();
}
}
// 5. 客户端 (Client)
public class FactoryMethodDemo {
public static void main(String[] args) {
// 假设我们通过某种配置(例如读取配置文件或命令行参数)
// 决定当前要使用哪种类型的汽车工厂
String carTypeConfig = "sedan";
// 创建
CarFactory factory;
if ("sedan".equals(carTypeConfig)) {
factory = new SedanCarFactory(); // 这里仍然需要实例化具体工厂
} else if ("suv".equals(carTypeConfig)) {
factory = new SUVCarFactory();
} else {
throw new IllegalArgumentException("Unknown car type config: " + carTypeConfig);
}
// 使用
Car car = sedanFactory.createCar();
car.drive();
}
}
解释:
Car是产品接口。SedanCar和SUVCar是具体产品。CarFactory是抽象工厂,定义了createCar()方法。SedanCarFactory和SUVCarFactory是具体工厂,它们实现了createCar()方法,并分别负责创建SedanCar和SUVCar。- 客户端代码只需要与
CarFactory接口交互,具体使用哪个工厂可以从配置中获取。当需要增加新的车型时,只需增加新的具体产品和对应的具体工厂,而不需要修改现有代码。