android - 在对象之间共享实例的最佳实践

标签 android android-activity visibility sharing instances

假设我有一个类MainActivity

这包含许多存储在字段中的对象,例如PlayerEnemyLevel等的实例。每个对象需要能够引用所有其他对象。

解决这个问题的最佳方法是什么?

  1. 将这些字段设为静态,并相应地引用它们,即

    MainActivity.player.setHealth(0);
    
  2. 为每个字段创建 getter 方法,并简单地向每个对象传递对 MainActivity 的引用,以便它们可以调用这些 getter 方法,即

    mainActivity.getPlayer().setHealth(0);
    
  3. 向每个对象传递对每个其他对象的引用,并将这些引用存储在每个对象内的字段中,以便可以直接引用它们,即

     player.setHealth(0);
    

最佳答案

不是真正的答案,只是给您一些提示。

你的播放器应该像这样:

public class Player
{
    private static Player _player = null;
    int _health;
    ...

    public static Player getInstance()
    {
        if (_player == null)
            _player = new Player(...);

        return _player;
    }

    public void increaseHealth(int amount)
    {
        _health += amount;
    }
 }

然后,在应用程序的任何部分,当您需要播放器时,您可以执行以下操作:

Player p = Player.getInstance();

并且你将一直得到同一个玩家。您可以对级别类别执行类似的操作,因为任何时候只有 1 个级别处于 Activity 状态。

然而,Enemy 类需要不同的方法。我会在 Level 类中创建一个列表,然后像这样获取它们:

Level l = Level.getInstance();
List<Enemy> enemiesOnLevel = l.getEnemies();
// do something with them

关于android - 在对象之间共享实例的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901816/

相关文章:

java - 尝试在 Android Java 中将图片保存到外部存储时出现 "No Activity found to handle Intent"错误

android - 如何在 Android 中使 View 不可见/消失 onBackPressed() 方法?

java - 反射(reflect) Android Activity 类的注释

c++ - 将参数传递到 C++ 共享库

具有 Material DesignSupport 的 Android 不会隐藏工具栏

android - 我的简单 Android 应用程序不显示选项菜单

android - 如何使用另一个对象显示 AlertDialog

android - 从抽屉导航 Activity 返回会使应用程序崩溃

java - 如何监听 child 能见度的变化?

java - 子类中的变量可见性