【问题标题】:what is best pattern to apply while loading jars dynamically [duplicate]动态加载罐子时应用的最佳模式是什么[重复]
【发布时间】:2014-08-06 01:09:02
【问题描述】:

我有 n 个具有相同功能但包名称不同的 jar(因为不同的地区)。 我使用这 n 个罐子执行了相同的操作。

现在我想加载相应区域的 jars,以供我操作。在这种情况下使用的最佳设计模式是什么。

我尝试通过更改包名称和动态加载来进行反射。但是这种情况有没有最好的模式?

【问题讨论】:

  • 我需要模式来处理这种情况,而不是动态加载 jar 的实现。
  • jar 是在运行时加载的吗?
  • 它不强制要求在运行时加载 jars。我需要以任何最佳方式实现此功能,因为我在这里看到很多重复的代码并且使用反射不是好的设计。

标签: java jar


【解决方案1】:

您会单独分发它们吗?如果不是,您不需要动态加载 jar 或反映它们。

您的应用可以引用所有 jar。这是您可能拥有的依赖项:

|Application Jar                   |
   ↓          ↓            ↓
   ↓   |Region 1 Jar| |Region 2 Jar|
   ↓          ↓            ↓
|Core Jar                          |

Core Jar 与区域无关,但具有一个或多个接口来满足它对区域的要求。 Region jars 具有实现这些核心接口的类,Application jar 负责构建正确的区域类并将它们全部插入。

如果区域不在您的控制范围内,并且它们不能依赖 Core 或实现它的接口,您可以使用适配器:

|Application Jar                                   |
   ↓              ↓                  ↓
   ↓   |Region 1 Jar Adapter| |Region 2 Jar Adapter|
   ↓    ↓         ↓                  ↓
|Core Jar |       ↓                  ↓
             |Region 1 Jar|   |Region 2 Jar|

这里的Region 1Region 2 是你喜欢的任何东西,它们没有依赖关系。只有一个包依赖于它们,那就是它的适配器包。 Adapter 支持一个核心接口,并且知道如何将调用转换为底层的 Region Jar。该应用程序与之前的情况相同。

【讨论】:

  • 我将无法编辑区域 jar。所以即使我定义了一个接口,我也无法将一个字段声明为特定的类型(因为每个 jar 都有相同的类但包名不同)。
  • 添加了当您无法编辑区域 jar 时的替代方案。
  • 我同意你给出的设计,你能解释一下如何将调用翻译到底层区域jar。这将解决我的问题。
  • 我读过Adapter Pattern
【解决方案2】:

由于您的不同实现具有不同的包名称,因此它们位于不同的 jar 中并不那么重要。只需使用工厂模式。

【讨论】:

  • 我对不同的包有相同的实现。因此,为了让实现保持不变,现在使用反射根据用户输入加载不同的包。但我不想使用反射,因为它非常慢。
猜你喜欢
  • 1970-01-01
  • 2013-05-24
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多