简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式不被视为GOF的23种经典设计模式之一,但它在实际编程中仍然广泛应用。
在简单工厂模式中,我们定义一个工厂类,这个类负责创建对象。工厂类通常包含一个或多个静态方法,这些方法根据传入的参数或条件来返回不同的对象实例。用户无需了解如何创建这些对象,只需要知道调用哪个工厂方法即可,降低了代码之间的耦合度。
下面是一个简单的示例:
```java
// 产品接口
public interface Product {
void use();
}
// 具体产品类1
public class ProductA implements Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
// 具体产品类2
public class ProductB implements Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
// 工厂类
public class SimpleFactory {
// 根据传入类型创建产品
public static Product createProduct(String type) {
if ("typeA".equals(type)) {
return new ProductA();
} else if ("typeB".equals(type)) {
return new ProductB();
} else {
throw new IllegalArgumentException("Invalid product type");
}
}
}
```
在这个例子中,`SimpleFactory`是工厂类,它根据传入的字符串类型创建`ProductA`或`ProductB`对象。客户端代码只需调用`SimpleFactory.createProduct()`方法并传入所需的产品类型,就可以获取到相应的对象实例,无需关心具体实现细节。
然而,简单工厂模式也有一些局限性。如果需要添加新产品,必须修改工厂类,这违反了开闭原则(对扩展开放,对修改关闭)。工厂方法通常具有静态类型,这意味着无法进行基于配置的动态对象创建。此外,如果产品类数量庞大或者层次结构复杂,简单工厂模式可能会变得难以维护。
在某些情况下,可以考虑使用其他创建型模式,如工厂方法模式、抽象工厂模式或构建者模式,以适应更复杂的需求。例如,工厂方法模式允许子类决定具体的产品实例,而抽象工厂模式则处理一组相关的或相互依赖的对象的创建。构建者模式则通过分步骤构建复杂对象,提供了更好的灵活性。
简单工厂模式在简单场景下提供了便利的代码组织和对象创建方式,但在系统需要扩展或有更复杂需求时,可能需要转向其他设计模式。在实际编程中,应根据项目的具体需求和规模选择合适的设计模式。