public interface ExtensionPoint {
void execute();
}
public class ExtensionImpl1 implements ExtensionPoint {
@Override
public void execute() {
}
}
public class ExtensionImpl2 implements ExtensionPoint {
@Override
public void execute() {
}
}
<extensions>
<extension id="extension1" class="com.example.ExtensionImpl1"/>
<extension id="extension2" class="com.example.ExtensionImpl2"/>
</extensions>
ExtensionLoader<ExtensionPoint> extensionLoader = new ExtensionLoader<>(ExtensionPoint.class);
extensionLoader.loadExtensions();
ExtensionPoint extension1 = extensionLoader.getExtension("extension1");
extension1.execute();
ExtensionPoint extension2 = extensionLoader.getExtension("extension2");
extension2.execute();