gpt4 book ai didi

java - 如何使整个系统都可以访问一组数据(JAVA)

转载 作者:行者123 更新时间:2023-12-02 06:34:47 26 4
gpt4 key购买 nike

简而言之:

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

详细:

考虑一个填字游戏应用程序。从主屏幕中,您可以选择要玩的填字游戏。填字游戏(类)创建多个问题(类)。要创建问题,需要使用两个字符串进行初始化:“问题”和“答案”。为了让填字游戏创建所有问题,它需要知道哪些问题属于它。当用户从列表中选择填字游戏时,它会传递一个 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 创建多个问题对象。像这样的东西:

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

我的问题:

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

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

最佳答案

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

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

一般来说:使用适当的抽象类型而不是使用数组来对域进行建模。这绝对不是面向对象的做法。

阅读本书: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

关于java - 如何使整个系统都可以访问一组数据(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com