MST

星途 面试题库

面试题:Java中工厂方法模式在插件化系统应用的基础理解

请简述Java工厂方法模式的核心概念,并说明在插件化系统中,它相较于简单工厂模式有哪些优势,结合具体代码示例阐述如何使用工厂方法模式来加载插件。
23.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Java工厂方法模式核心概念

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。其核心在于将对象的创建和使用分离,通过一个抽象的工厂类定义创建对象的抽象方法,具体的对象创建由其子类实现。这样,当需要创建新的对象类型时,只需新增一个具体的工厂子类,而不需要修改原有代码,符合开闭原则。

相较于简单工厂模式在插件化系统中的优势

  1. 可扩展性更强:简单工厂模式将所有对象创建逻辑集中在一个工厂类中,当新增插件类型时,需要修改该工厂类的代码。而工厂方法模式通过让每个具体工厂负责创建一种特定类型的插件,新增插件类型只需新增对应的具体工厂子类,无需修改原有工厂类代码。
  2. 符合开闭原则:工厂方法模式在添加新的插件类型时,只需要扩展新的具体工厂类和对应的插件类,对原有代码无侵入性。而简单工厂模式添加新插件类型时,要修改工厂类的创建逻辑,违反开闭原则。

代码示例

  1. 定义插件接口
public interface Plugin {
    void execute();
}
  1. 定义具体插件类
public class PluginA implements Plugin {
    @Override
    public void execute() {
        System.out.println("PluginA is executing.");
    }
}

public class PluginB implements Plugin {
    @Override
    public void execute() {
        System.out.println("PluginB is executing.");
    }
}
  1. 定义抽象工厂类
public abstract class PluginFactory {
    public abstract Plugin createPlugin();
}
  1. 定义具体工厂类
public class PluginAFactory extends PluginFactory {
    @Override
    public Plugin createPlugin() {
        return new PluginA();
    }
}

public class PluginBFactory extends PluginFactory {
    @Override
    public Plugin createPlugin() {
        return new PluginB();
    }
}
  1. 使用工厂方法模式加载插件
public class Main {
    public static void main(String[] args) {
        PluginFactory pluginAFactory = new PluginAFactory();
        Plugin pluginA = pluginAFactory.createPlugin();
        pluginA.execute();

        PluginFactory pluginBFactory = new PluginBFactory();
        Plugin pluginB = pluginBFactory.createPlugin();
        pluginB.execute();
    }
}

在上述代码中,通过抽象工厂类PluginFactory定义创建插件的抽象方法createPlugin,具体的工厂类PluginAFactoryPluginBFactory分别负责创建PluginAPluginB。在main方法中,通过具体工厂类创建对应的插件实例并执行,实现了插件的加载。