有一种确定“主要”是Android还是Java的方法

问题描述

|| 我最近写了一个Java纸牌游戏,并将所有游戏逻辑编写在一个称为Game的类中。在可能的情况下,我尝试将所有GUI处理保持在此类之外。我现在正在尝试将此游戏转换为Android应用程序。 然后在playAutomaticTurn()方法(由Android Activity和Java桌面应用程序使用)中,如果计算机播放器希望宣布自己已经赢了,我便在Game中调用另一个方法。使用我创建的SoundEffect类(使用javax.sound.sampled。*库),该方法根据结果播放两种声音效果。 而不是完全重写代码以将声音效果移回调用方法(我想我必须从我的notifyWin()方法返回状态,然后从playAutomaticTurn()返回此状态)是否有一种简洁的方法确定主调用应用程序是否为Android? 这样,我可以放置if或case语句,并以不同的方式处理声音效果? 例如。
if (androidApp) {
    playAndroidSoundEffect
} else {
    playJavaxSoundEffect();
}
还是在类的开头创建常量声明并使用Java和Android版本的不同值进行编译的唯一方法? 例如。编译适用于Android的版本(尚未实现Android声音)
private static final boolean SOUND = false;

//...

if (SOUND)
    playJavaxSoundEffect();
感谢您提供的任何帮助和建议。     

解决方法

        在您的代码中闪出很多ѭ2是不好的做法,我建议创建一个捕获平台特定行为的接口,例如
interface SoundService {
   playSound(/* ... */);
}
这样,您可以创建接口的多个实现,包括用于懒惰的琐碎的“ 4”实现,并使所有平台特定的代码都位于非常可视的位置。     ,        在黑暗中拍摄 您能否使用反射为仅在android中可用的库创建布尔值:
            boolean isAndroid = false;
            try {
                    Context.class.getMethod(\"getApplicationContext\",null);
                    isAndroid = true;
            } catch (NoSuchMethodException e) {
                    isAndroid = false;
            } catch (Exception e) {
                    isAndroid = false;
            }
    ,        使用Waldheinz和Blundell的思想,我们可以创建基本的工厂模式,我们可以看到Game不需要了解平台依赖性...并且所有Sound对象的初始化都是在工厂完成的,而确定要创建哪种对象的决定就是工厂的决定。 ...和布隆德尔的方法可以用于相同的 请找到示例工厂模式代码http://www.devdaily.com/java/java-factory-pattern-example     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...