如何实现算法库?

时间:2015-11-23 08:24:31

标签: java design-patterns repository repository-design

我有一套用Java实现的算法并打包为jar文件。该算法适用于第三方访问它们。算法有几种变化。将添加加班,新版本和新类型的算法。与此同时,我不会强迫所有第三方使用新算法。

我正在考虑为此实现一个简单的存储库系统。要求如下:

  1. 创建/删除repos,以便每个repo包含一组算法变体。
  2. 一个repos中的算法可以同时运行serverl版本。
  3. 可以将新算法添加到回购。
  4. 是否有一些开源项目符合我的要求?或者是否存在一些类似问题的设计模式?

1 个答案:

答案 0 :(得分:0)

基于模式的解决方案将在几条评论中建议,声明接口和实现工厂:

对于每种算法,您应该:

  • 声明它自己的接口,它应该以保守的方式及时存在:通过新版本,保留现有的API而不进行修改(因此旧代码总是可以使用它)。如果需要,请添加 new 方法。

  • 为您要支持的每个版本编写实现代码。此实现必须具有可见性,并且它们可以共享相同的包,但每个包都有自己的名称,即corse。

  • 然后,添加工厂以构建实现对象。该工厂应将所需版本作为参数:

public class MyFactory { public MyInterface create(String version) throws VersionNotSupportedException {...} } 关于对这个工厂进行编码,我还建议你在每个JAR中添加META-INF/myfile版本和实现类之间的映射,以便MyFactory可以使它们全部执行:

getClass().getClassLoader().getResources("META-INF/myfile");

更进一步,您可以声明通用工厂参数化返回对象的类型:

public class MyGenericFactory<T>
{
    public T create(String version) throws VersionNotSupportedException {...}
}