使用泛型和反射机制避免在工厂模式中进行类型转换。
示例代码:
public interface Product {
void use();
}
public class ConcreteProductA implements Product {
public void use() {
// do something
}
}
public class ConcreteProductB implements Product {
public void use() {
// do something
}
}
public class ProductFactory {
private Class productClass;
public ProductFactory(Class productClass) {
this.productClass = productClass;
}
public T createProduct() {
try {
return productClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
// 使用示例
ProductFactory factoryA = new ProductFactory<>(ConcreteProductA.class);
Product productA = factoryA.createProduct();
productA.use();
ProductFactory factoryB = new ProductFactory<>(ConcreteProductB.class);
Product productB = factoryB.createProduct();
productB.use();
在上述示例代码中,ProductFactory 使用泛型来限制 T 必须继承自 Product 接口。在 createProduct 方法中,使用反射机制来创建指定类型的 Product 实例,避免了进行类型转换的情况。这样,在使用 ProductFactory 的时候,就可以直接通过泛型来指定要创建的产品类型,而无需进行类型转换。同时,这种方式也保证了编译器能够在编译时检查出类型错误,提高了代码的可靠性。