如何使整个系统可访问的数据数组(JAVA)

时间:2013-11-04 10:30:42

标签: java oop

简而言之:

在启动Java / Android应用程序时,请考虑使用硬编码值初始化的数据数组。然后,在运行时,类可以从该数据中读取。它想要访问的数组中的确切元素取决于运行时的用户输入。

详细说明:

考虑一个填字游戏应用程序。在主屏幕中,选择要播放的填字游戏。填字游戏(类),创建多个问题(类)。要创建一个问题,它会用两个字符串初始化:'question'和'answer'。为了让填字游戏能够创建所有问题,它需要知道哪些问题属于它。当用户从列表中选择填字游戏时,它会传递一个ID,该ID将映射到(可能)多维数组的元素索引,其中每个外部数组代表一组填字游戏问题,每个内部数组代表其中的问题填字游戏。与下面类似:

Array(
// crossword 1
[0] => Array(
    // question 1
    [0] => Array(
        [0] => 'question'
        [1] => 'answer'
    )
    // question 2
    [1] => Array(
        [0] => 'question'
        [1] => 'answer'
    )
)
// crossword 2
[1] => Array(
    // question 1
    [0] => Array(
        [0] => 'question'
        [1] => 'answer'
    )
    // question 2
    [1] => Array(
        [0] => 'question'
        [1] => 'answer'
    )       
)

好的,所以用户选择填字游戏1,我现在创建一个填字游戏对象,通过访问全局数组的索引1来创建多个Question对象。类似的东西:

Q1 = new Question(globalArr[1][0][0], globalArr[1][0][1]);
Q2 = new Question(globalArr[1][1][0], globalArr[1][1][1]);

我的问题:

我想(希望)有一个更优雅的OOP解决方案。假设有,我会感谢有人分享他们的知识。 Singleton设计会在这里发挥作用吗?

这里的主要目标是制作关于整个应用程序(或至少一个类)可访问的每个问题的硬编码信息

3 个答案:

答案 0 :(得分:1)

在Java中提供硬编码值的通用(并且通常是脏的)方法是在类中声明静态字段或数据结构,然后由类加载器提供。这就是大多数情况下单例实现的方式。但是,由于您将创建单个实例的管理委托给您的类加载器(在一个VM中可以有多个类加载器),因此无法保证您将始终使用完全相同的静态数据实例。因此,这不是在多个线程之间传递数据的好方法。

在Android中处理数据/内容的正确方法可能是使用Android内容提供程序API将您的域模型(填字游戏)映射到实现。如果您绝对需要,您还可以提供硬编码值。

通常:使用适当的抽象类型为您的域建模,而不是使用数组。这绝对不是OO的做法。

阅读本书:http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=sr_1_1?ie=UTF8&qid=1383562013&sr=8-1&keywords=domain+driven+design

答案 1 :(得分:1)

怎么样:

  • 将主要项目crossWords定义为CrossWord对象的Singleton集合
  • 您的CrossWord对象包含问题对象集合
  • 您的问题对象包含2个字段:问题和答案

您可以使用CrossWord var指向用户选择的CrossWord:

CrossWord selectedCW = crossWords.get(index);

添加Q& A可以使用:

Question q = new Question();
q.setQuestion("question");
q.setAnswer("answer");
selectedCW.add(q);

或重载的构造函数:

selectedCW.add(new Question("question","answer"));

查看Java Collection Framework以选择最佳收藏实施。

答案 2 :(得分:0)

您可以使用Singleton Pattern并将此数组放在一个类中。 http://en.wikipedia.org/wiki/Singleton_pattern

public class Question {
private Question() {}; // no one can create a instance
public final static Question INSTANCE = new Question();
private final Array[] array = ...

public getArray() {
return array;
}

对于线程保存,请阅读http://javarevisited.blogspot.de/2012/12/how-to-create-thread-safe-singleton-in-java-example.html