Java泛型如何实现工厂模式
在Java中,泛型可以用来实现一个通用的工厂模式,这样你就可以创建不同类型的对象,而不需要为每种类型编写特定的工厂类。下面是一个简单的例子,展示了如何使用泛型实现一个工厂模式。
首先,定义一个产品接口:
public interface Product {
void use();
}
然后,创建几个实现该接口的具体产品类:
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductA");
}
}
public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductB");
}
}
接下来,创建一个泛型工厂类:
public class GenericFactoryextends Product> {
private Class clazz;
public GenericFactory(Class clazz) {
this.clazz = clazz;
}
public T createProduct() {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException("Error creating product", e);
}
}
}
在这个泛型工厂类中,我们使用了一个泛型参数T,它必须是Product的子类。构造函数接受一个Class类型的参数,用于指定要创建的产品类型。createProduct方法使用反射来创建一个新的产品实例。
最后,你可以使用这个泛型工厂来创建不同类型的产品:
public class Main {
public static void main(String[] args) {
GenericFactory factoryA = new GenericFactory<>(ConcreteProductA.class);
Product productA = factoryA.createProduct();
productA.use();
GenericFactory factoryB = new GenericFactory<>(ConcreteProductB.class);
Product productB = factoryB.createProduct();
productB.use();
}
}
这个例子展示了如何使用泛型工厂来创建不同类型的产品,而不需要为每种产品编写特定的工厂类。这使得代码更加简洁和可扩展。