我有五个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应用程序中。
请帮助,我应该如何继续实现这一目标。 谢谢
答案 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");
但可能会发生垃圾收集并且可能发生泄漏