MST

星途 面试题库

面试题:Java中如何在工厂模式结合反射实现基础的动态对象创建

请描述在Java中,工厂模式结合反射机制实现动态对象创建的基本步骤,并给出一个简单的代码示例,假设存在一个接口`Shape`及其实现类`Circle`和`Rectangle`,通过工厂模式和反射动态创建`Shape`的实例。
25.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

基本步骤:

  1. 定义接口:定义一个接口,所有需要通过工厂创建的对象都实现这个接口。
  2. 创建实现类:创建接口的具体实现类。
  3. 创建工厂类:在工厂类中,使用反射机制根据类名动态创建对象。
  4. 调用工厂方法:通过调用工厂类的方法,传入需要创建对象的类名,获取相应的对象实例。

代码示例:

// 定义Shape接口
interface Shape {
    void draw();
}

// Circle实现类
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Circle.");
    }
}

// Rectangle实现类
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Rectangle.");
    }
}

// 工厂类
class ShapeFactory {
    public static Shape createShape(String className) {
        try {
            // 使用反射加载类
            Class<?> shapeClass = Class.forName(className);
            // 创建实例
            return (Shape) shapeClass.newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

// 测试类
public class FactoryPatternWithReflectionExample {
    public static void main(String[] args) {
        Shape circle = ShapeFactory.createShape("Circle");
        if (circle != null) {
            circle.draw();
        }

        Shape rectangle = ShapeFactory.createShape("Rectangle");
        if (rectangle != null) {
            rectangle.draw();
        }
    }
}

在上述代码中:

  1. Shape接口定义了draw方法。
  2. CircleRectangle类实现了Shape接口。
  3. ShapeFactory类的createShape方法使用反射根据传入的类名创建Shape的实例。
  4. main方法中,通过ShapeFactory创建CircleRectangle的实例并调用draw方法。注意在实际使用时,传入createShape方法的类名应包含完整的包名,如果类在默认包中则直接写类名。这里为了简洁,假设类在默认包中。