在软件开发中,设计模式是解决常见问题的可重用方案。工厂方法模式作为一种创建型模式,广泛应用于对象创建场景。本文详细解析工厂方法模式,并探讨简单工厂模式的局限性及其“死亡之路”。
工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪个类。工厂方法让类的实例化延迟到子类进行,实现了创建者与具体产品的解耦。
核心结构:
- 抽象产品(Product):定义产品的接口
- 具体产品(ConcreteProduct):实现抽象产品接口
- 抽象工厂(Creator):声明工厂方法
- 具体工厂(ConcreteCreator):实现工厂方法,返回具体产品实例
示例代码:`java
// 抽象产品
interface Product {
void operation();
}
// 具体产品A
class ConcreteProductA implements Product {
public void operation() {
System.out.println("产品A操作");
}
}
// 具体产品B
class ConcreteProductB implements Product {
public void operation() {
System.out.println("产品B操作");
}
}
// 抽象工厂
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.operation();
}
}
// 具体工厂A
class ConcreteCreatorA extends Creator {
public Product factoryMethod() {
return new ConcreteProductA();
}
}
// 具体工厂B
class ConcreteCreatorB extends Creator {
public Product factoryMethod() {
return new ConcreteProductB();
}
}`
简单工厂模式通过一个工厂类来创建所有产品,基于传入参数决定创建哪种产品。
简单工厂示例:`java
class SimpleFactory {
public static Product createProduct(String type) {
switch(type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("未知产品类型");
}
}
}`
简单工厂模式虽然简单易用,但随着项目发展,会面临以下致命问题:
死亡征兆:
- 工厂类中充斥着大量的if-else或switch-case语句
- 每次新增产品都要修改现有代码
- 测试困难,工厂类的修改会影响所有依赖它的代码
- 代码耦合度高,难以重构
| 特性 | 简单工厂模式 | 工厂方法模式 |
|------|-------------|-------------|
| 扩展性 | 差,需修改工厂类 | 好,只需添加新工厂 |
| 符合开闭原则 | 否 | 是 |
| 复杂度 | 简单 | 相对复杂 |
| 适用场景 | 产品类型固定 | 产品类型可能扩展 |
| 维护成本 | 随产品增加而升高 | 相对稳定 |
工厂方法模式通过将对象的创建延迟到子类,提供了更好的灵活性和扩展性。而简单工厂模式虽然在小型项目中简单实用,但在大型复杂系统中容易走上“死亡之路”。作为开发者,理解不同模式的适用场景和局限性,才能在合适的时机做出正确的设计选择。
如若转载,请注明出处:http://www.hwqhdcm.com/product/13.html
更新时间:2025-11-29 17:59:17