Java工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一个通用的接口来创建对象,但允许子类决定实例化哪个类。这种模式通过将对象的创建委托给工厂类来实现,从而将具体类的实例化与客户端代码分离开来。
在Java工厂模式中,有一个工厂接口或抽象类,它定义了创建对象的方法,具体的实现由子类来完成。客户端代码只需要使用工厂接口或抽象类来创建对象,而不需要知道具体实现的细节。
以下是Java工厂模式的几个要点:
-
工厂接口或抽象类:定义创建对象的方法,由具体的工厂子类来实现。
-
具体工厂类:实现工厂接口或抽象类,并负责创建具体的产品对象。
-
产品接口或抽象类:定义产品的属性和方法。
-
具体产品类:实现产品接口或抽象类,并定义具体的属性和方法。
使用Java工厂模式可以使代码更具有可扩展性和可维护性,因为客户端代码只依赖于工厂接口或抽象类,而不依赖于具体实现。如果需要添加新的产品类,只需要创建一个新的具体工厂类即可,而不需要修改客户端代码。
以下是一个简单的Java工厂模式示例,假设有一个产品类Product和一个产品工厂类ProductFactory,它能够创建不同类型的产品对象,例如ProductA和ProductB
Product.java:
public interface Product {
void printName();
}
ProductA.java:
public class ProductA implements Product {
@Override
public void printName() {
System.out.println("Product A");
}
}
ProductB.java:
public class ProductB implements Product {
@Override
public void printName() {
System.out.println("Product B");
}
}
ProductFactory.java:
public class ProductFactory {
public Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
throw new IllegalArgumentException("Invalid product type.");
}
}
}
使用该工厂类创建对象的示例:
ProductFactory factory = new ProductFactory();
Product productA = factory.createProduct("A");
Product productB = factory.createProduct("B");
productA.printName(); // Output: Product A
productB.printName(); // Output: Product B
在该示例中,工厂类ProductFactory提供了一个createProduct方法来创建产品对象。客户端代码只需要调用该方法并传入相应的产品类型,就能够创建对应的产品对象。这样,当需要添加新的产品类型时,只需要在工厂类中添加相应的代码即可,而不需要修改客户端代码。