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

时间:2014-01-03 10:47:23

标签: 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);
    

3 个答案:

答案 0 :(得分:2)

不是一个真正的答案,只是为了给你一些提示。

你的播放器应该如此:

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个关卡会活动。

然而敌人类需要采用不同的方法。我会在Level类中创建一个List,并像这样得到它们:

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

答案 1 :(得分:0)

在这里查看Android文档:http://developer.android.com/guide/faq/framework.html#3。还可以将对象序列化为原始数据类型,并将Intent中的对象传递给新的Activity。

答案 2 :(得分:0)

在活动之间共享对象的另外两个选项是使用parcable,我认为这可能是性能最高的方法和共享首选项。

在我的应用程序中,我曾经学过(我对android编程知之甚少),我使用gson将对象序列化为json,然后将其存储在活动A的共享首选项中,然后从活动B中的共享首选项重新创建它,然后再次存储它。