使用java反射机制改进的工厂模式 下面给出工厂模式的代码清单3-1示例,通过Factory类,可以创建Fruit的子类。如果为Fruit类增加一个实现类Banana,
时间: 2024-09-27 13:16:24 浏览: 46
在Java中,传统工厂模式通常会硬编码产品类名或者关联规则,但如果需要频繁添加新的产品或修改生产流程,这种方式就会显得不够灵活。使用反射机制改进的工厂模式允许动态地根据需求或配置信息来创建对象,增强了代码的灵活性。
首先,我们需要创建一个抽象的Product接口和具体的Fruit类:
```java
public interface Product {
void eat();
}
public abstract class Fruit implements Product {
// 具体方法...
}
```
然后,我们可以创建一个ReflectiveFactory类,它使用Class对象来实例化指定的产品类:
```java
import java.lang.reflect.Constructor;
public class ReflectiveFactory {
public static Product createProduct(String className) throws Exception {
Class<?> productClass = Class.forName(className);
Constructor<Product> constructor = productClass.getConstructor();
return constructor.newInstance(); // 可能需要传递构造函数参数
}
}
```
现在,当我们想添加一个新的香蕉类(Banana),只需创建一个Banana类并实现Product接口,然后在ReflectiveFactory中注册其名称即可:
```java
public class Banana extends Fruit {
@Override
public void eat() {
System.out.println("Eating a banana...");
}
}
// 注册香蕉类
ReflectiveFactory.registerProduct("Banana", Banana.class);
// 创建香蕉实例
Product banana = ReflectiveFactory.createProduct("Banana");
banana.eat();
```
阅读全文