Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不同的jar调用相同的方法_Java_Spring Mvc - Fatal编程技术网

Java 从不同的jar调用相同的方法

Java 从不同的jar调用相同的方法,java,spring-mvc,Java,Spring Mvc,我有五个Jar文件。所有Jar文件都包含相同的类Play和相同的方法PlayGame(),但玩游戏的逻辑不同。 例如: Class Play{ public String PlayGame(){ //logic for playing Game //each jar contain different logic for playing game } } 我有一个主应用程序,它包含所有五个罐子。 我的主应用程序调用Pl

我有五个Jar文件。所有Jar文件都包含相同的类Play和相同的方法PlayGame(),但玩游戏的逻辑不同。 例如:

Class Play{

     public String PlayGame(){
             //logic for playing Game
             //each jar contain different logic for playing game
     }
} 
我有一个主应用程序,它包含所有五个罐子。 我的主应用程序调用PlayGame()方法

我想要, 在football select上,应调用football jar的PlayGame()方法。 在hockey select上,应该调用hockey jar的PlayGame()方法。 等等

我玩游戏的所有不同实现都在不同的罐子里。因为我的应用程序从实现的用户那个里接受jar,并将其放在类路径中,然后重新启动应用程序

请帮助我,我应该如何着手实现这一点。
谢谢

这似乎可以用一个“”来解决。您将拥有一个定义常见行为的抽象基类和抽象类的5个具体实现,而不是5个JAR。当您点击阅读football的按钮时,您将执行football实现,依此类推。这看起来可以用“”来解决。您将拥有一个定义常见行为的抽象基类和抽象类的5个具体实现,而不是5个JAR。当您点击阅读football的按钮时,您将执行football实现,依此类推。您不应该这样做。相反,定义一个具有
playGame()
方法的
接口Play
,并创建实现该接口的不同类。

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

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

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

其中CreateGame方法是工厂类方法。GameType是Enum

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

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

其中CreateGame方法是工厂类方法。GameType是Enum

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

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();
}

您可以搜索有关工厂模式的更多信息。

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

 public Game createGame(GameType gameType){
   Game game = null;
   Switch(gameType){
       Case FOOTBALL :
       game = new FootBall();
       Case CRICKET :
       game = new Cricket()
  }
 return game;
 }
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();
}

您可以搜索更多关于工厂模式的信息。

我可以通过创建这样的classloder从jar加载

 public Game createGame(GameType gameType){
   Game game = null;
   Switch(gameType){
       Case FOOTBALL :
       game = new FootBall();
       Case CRICKET :
       game = new Cricket()
  }
 return game;
 }
    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");

但它可能不会被垃圾收集,也可能会发生泄漏

我可以通过创建这样的classloder从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");
但它可能会发生,它不会垃圾收集,并可能会发生泄漏