工厂类设计为单例模式还是静态方法,取决于具体需求和场景。以下是详细分析:
ProductFactory.createProduct()
)。ProductFactory.getInstance().createProduct()
)。| 维度 | 静态方法工厂 | 单例模式工厂 | |-------------------|------------------------------------------|------------------------------------------| | 内存开销 | 无实例化,节省内存 | 需维护单例实例,略微占用内存 | | 扩展性 | 难以继承或重写(静态方法不可覆盖) | 可通过子类扩展(如替换单例实现) | | 测试与模拟 | 难以模拟(静态方法硬编码) | 可通过依赖注入替换单例实例,便于测试 | | 状态维护 | 无法维护工厂状态(无实例变量) | 可维护工厂内部状态(如缓存、配置等) | | 多线程安全 | 天然线程安全(无共享状态) | 需自行实现线程安全(如双重检查锁) |
public class ProductFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ProductA();
} else if ("B".equals(type)) {
return new ProductB();
}
throw new IllegalArgumentException("Invalid type");
}
}
// 使用
Product p = ProductFactory.createProduct("A");
public class ProductFactory {
private static ProductFactory instance;
private ProductFactory() {} // 私有构造
public static synchronized ProductFactory getInstance() {
if (instance == null) {
instance = new ProductFactory();
}
return instance;
}
public Product createProduct(String type) {
// 创建逻辑(可能依赖内部状态)
}
}
// 使用
Product p = ProductFactory.getInstance().createProduct("A");