在软件设计中,我们经常需要创建对象,但直接使用new关键字实例化对象会使代码耦合度增高,不利于后续扩展和维护。工厂方法模式(Factory Method Pattern)应运而生,它提供了一种优雅的解决方案。
工厂方法模式核心思想
工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类,从而实现了创建者与具体产品的解耦。
模式结构分析
- Product(产品接口):定义产品的规范
- ConcreteProduct(具体产品):实现产品接口的具体类
- Creator(创建者):声明工厂方法的核心抽象类
- ConcreteCreator(具体创建者):实现工厂方法,返回具体产品实例
完整代码示例
// 产品接口
interface Vehicle {
void manufacture();
}
// 具体产品类
class Car implements Vehicle {
@Override
public void manufacture() {
System.out.println("生产汽车");
}
}
class Motorcycle implements Vehicle {
@Override
public void manufacture() {
System.out.println("生产摩托车");
}
}
// 创建者抽象类
abstract class VehicleFactory {
// 工厂方法
public abstract Vehicle createVehicle();
public void deliverVehicle() {
Vehicle vehicle = createVehicle();
vehicle.manufacture();
System.out.println("交付完成");
}
}
// 具体创建者
class CarFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Car();
}
}
class MotorcycleFactory extends VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Motorcycle();
}
}
// 客户端使用
public class FactoryPatternDemo {
public static void main(String[] args) {
VehicleFactory carFactory = new CarFactory();
carFactory.deliverVehicle();
VehicleFactory motorcycleFactory = new MotorcycleFactory();
motorcycleFactory.deliverVehicle();
}
}
优势与适用场景
工厂方法模式最大优势在于遵循开闭原则,当需要添加新产品时,只需新增具体工厂和产品类,无需修改现有代码。它特别适用于以下场景:
- 无法预知对象确切类型及其依赖关系时
- 希望为库或框架提供扩展接口时
- 需要将对象创建与使用分离以降低耦合度时
通过工厂方法模式,我们获得了极高的灵活性和可扩展性,为大型项目奠定了坚实的架构基础。
1万+

被折叠的 条评论
为什么被折叠?



