有没有办法确定“主要”是Android还是Java

时间:2011-06-16 15:28:43

标签: java android

我最近写了一个Java扑克牌游戏,所有游戏逻辑都写在一个名为Game的Class中。在可能的情况下,我尝试将所有GUI处理保留在此类之外。我现在正在尝试将此游戏转换为Android应用程序。

在playAutomaticTurn()方法(由Android Activity和Java桌面应用程序使用)中,如果计算机玩家希望宣布他们已经赢了,我会在游戏中调用另一种方法。这会使用我创建的SoundEffect类(使用javax.sound.sampled。*库)播放依赖于结果的两种声音效果。

而不是完全重写代码以将声音效果移回到调用方法(我想我必须从我的announceWin()方法返回一个状态,然后从playAutomaticTurn()返回它是否有一个简洁确定主要调用应用程序是否为Android的方法?

通过这种方式,我可以使用if或case语句并以不同的方式处理声音效果?

E.g。

if (androidApp) {
    playAndroidSoundEffect
} else {
    playJavaxSoundEffect();
}

或者是在类的开头创建常量声明并使用Java和Android版本的不同值编译它的唯一方法吗?

E.g。为Android编译版本(尚未实现Android声音)

private static final boolean SOUND = false;

//...

if (SOUND)
    playJavaxSoundEffect();

感谢您提供的任何帮助和建议。

3 个答案:

答案 0 :(得分:4)

代码周围闪烁大量if是不好的做法,我建议创建捕获平台特定行为的接口,例如

interface SoundService {
   playSound(/* ... */);
}

通过这种方式,您可以创建接口的多个实现,包括惰性的简单NoOp实现,并在非常查看的位置具有所有特定于平台的代码。

答案 1 :(得分:0)

在黑暗中拍摄

你能否使用反射为只在android中提供的库做一个布尔值:

            boolean isAndroid = false;
            try {
                    Context.class.getMethod("getApplicationContext", null);
                    isAndroid = true;
            } catch (NoSuchMethodException e) {
                    isAndroid = false;
            } catch (Exception e) {
                    isAndroid = false;
            }

答案 2 :(得分:0)

使用Waldheinz和Blundell的想法,我们可以创建基本的工厂模式,我们可以看到游戏不需要了解平台依赖...并且所有Sound对象初始化都在工厂完成并决定要创建什么样的对象工厂的决定......而Blundell的方法也可以用于此 请查找示例工厂模式代码http://www.devdaily.com/java/java-factory-pattern-example