java

时间:2016-06-07 15:14:24

标签: java generics modularity serviceloader modular-design

我的应用程序使用ServiceLoader,我有两种类型的服务: 算法和导出器。代码:

public abstract class Algorithm<E> {
        public abstract E process();
        public abstract void askParameters();
}



public abstract class Exporter<E> {
    public abstract void export(E element);
    public abstract void askParameters();
}

我有另一个类,Executor,&#34; wire&#34;算法和出口商在一起:

public class Executor<T, A extends Algorithm<T>, E extends Exporter<T>> {
    A algo;
    E exporter;

    public Executor(A a, E e){
        algo = a;
        exporter = e;
    }

    public void execute(){
        algo.askParameters();
        exporter.askParameters();
        exporter.export(algo.process());
    }
}

团队成员独立地为几种类型的事物编写代码算法和导出器。他们把它放在一个jar中,注册算法或导出器的服务提供者,而应用程序的核心在于组合这些模块。

我写了那个小测试:

public class MainTestServiceLoader {

    public static void main(String[] args) {
        AlgorithmService algoService = new AlgorithmService();
        ExporterService exporterService = new ExporterService();
        Algorithm<Labyrinth> braidMaze = algoService.getAlgorithm1();
        Exporter<Labyrinth> toLvl = exporterService.getExporter1();
        Executor<Labyrinth,Algorithm<Labyrinth>,Exporter<Labyrinth>> executor = new Executor(braidMaze,toLvl);
        executor.execute();    
    }    
}

但我预见到未来的问题。由于加载程序不知道算法或导出程序的特定类型,我如何确定两者的组合是兼容的?或者有没有办法过滤服务加载器中的服务,具体取决于算法/出口的工作类型? 谢谢你

编辑:为了更清楚:让我们说有人编码模块算法,而另一个代码是导出器。它们将以相同的方式加载到ServiceLoader中。有没有办法区别他们?

0 个答案:

没有答案