从不同的JAR调用相同的方法

时间:2013-09-17 10:12:03

标签: java spring-mvc

我有五个Jar文件。所有jar文件都包含Same Class Play和相同方法PlayGame()但是具有不同的玩游戏逻辑。 示例:

Class Play{

     public String PlayGame(){
             //logic for playing Game
             //each jar contain different logic for playing game
     }
} 

我有一个主要应用程序,它包含所有五个罐子。 我的主要应用程序调用PlayGame()方法。

我想要那个, 在足球选择上,应该调用足球罐的PlayGame()方法。 在曲棍球选择时,应该调用Hockey jar的PlayGame()方法。 所以...

我玩游戏的所有不同实现都在不同的罐子里。因为我的应用程序接受来自其实现的用户的jar并将其放在classpath和Restarts应用程序中。

请帮助,我应该如何继续实现这一目标。 谢谢

5 个答案:

答案 0 :(得分:1)

这看起来可以通过“abstract/template method pattern”来解决。您将拥有一个定义常见行为的抽象基类,而不是您的5个jar,以及抽象类的5个具体实现。当您点击阅读足球的按钮时,您将执行足球实施,依此类推

答案 1 :(得分:1)

你不应该这样做。相反,定义具有interface Play方法的playGame(),并创建实现该接口的不同类。

答案 2 :(得分:1)

使用抽象工厂模式或工厂模式。

 public Game createGame(GameType gameType){
   Game game = null;
   Switch(gameType){
       Case FOOTBALL :
       game = new FootBall();
       Case CRICKET :
       game = new Cricket()
  }
 return game;
 }

其中CreateGame方法是Factory类method.GameType是Enum

答案 3 :(得分:0)

您可以使用工厂模式来实现目标。

public void playGame(GameType gameType){
  Game game = null;
  if(gameType instanceof Football){
      game = new Football();
  }else if(gameType instanceof BasketBall){
      game = new BasketBall();
  }
  game.play();
}

你可以搜索更多的工厂模式。

答案 4 :(得分:0)

我可以通过创建类似这样的类加载器从jar加载

    File file  = new File("c:\\myjar.jar");
    URL url = file.toURL();  
    URL[] urls = new URL[]{url};
    ClassLoader loader = new URLClassLoader(urls);
    Class cls = loader.loadClass("com.mypackage.Play");

但可能会发生垃圾收集并且可能发生泄漏