gpt4 book ai didi

arrays - 如何在应用程序中的所有类之间共享一个数组?

转载 作者:行者123 更新时间:2023-12-01 15:11:42 25 4
gpt4 key购买 nike

我想共享一个数组,所有类都可以“获取”和“更改”该数组中的数据。类似于全局阵列或多路访问阵列。这在 ActionScript 3.0 中如何实现?

最佳答案

有几种方法可以解决这个问题。一种是使用全局变量(如 unkiwii 的回答中所建议的那样),但这在 ActionScript 中不是很常见的方法。更常见的方法是:

类变量(静态变量)

创建一个名为 DataModel 或类似的类,并在该类上定义一个静态数组变量:

public class DataModel {
public static var myArray : Array = [];
}

然后您可以使用 DataModel.myArray 从应用程序的任何部分访问它。这很少是一个很好的解决方案,因为(像全局变量一样)您的应用程序的一部分无法知道数组的内容何时被应用程序的另一部分修改。这意味着即使您的数据输入 GUI 向数组添加了一个对象,您的数据列表 GUI 也不会知道要显示新数据,除非您实现一些其他方式告诉它重绘。

单例环绕数组

另一种方法是创建一个名为 ArraySingleton 的类,它包装实际的数组并提供对其的访问方法,并且可以使用非常常见的将单个实例保存在静态变量中的单例模式来访问其实例。

public class ArraySingleton {
private var _array : Array;

private static var _instance : ArraySingleton;


public static function get INSTANCE() : ArraySingleton {
if (!_instance)
_instance = new ArraySingleton();

return _instance;
}


public function ArraySingleton() {
_array = [];
}


public function get length() : uint {
return _array.length;
}

public function push(object : *) : void {
_array.push(object);
}

public function itemAt(idx : uint) : * {
return _array[idx];
}
}

这个类包装了一个数组,可以通过ArraySingleton.INSTANCE访问单个实例。这意味着您可以:

var arr : ArraySingleton = ArraySingleton.INSTANCE;
arr.push('a');
arr.push('b');
trace(arr.length); // traces '2'
trace(arr.itemAt(0)); // trace 'a'

这样做的最大好处是您可以在添加项目或以任何其他方式修改数组时调度事件,以便您的应用程序的所有部分都可以收到此类更改的通知。您可能希望通过实现更多类似数组的接口(interface)来扩展上面的示例,例如 pop()、shift()、unshift() 等。

依赖注入(inject)

大型应用程序开发中的一种常见模式称为依赖注入(inject),基本上意味着通过以某种方式标记您的类(经常使用 AS3 元数据),您可以发出信号,框架应该将引用“注入(inject)”到那个类(class)。这样,类就不需要关心引用来自哪里,但框架会确保它在那里。

一个非常流行的 AS3 DI 框架是 Robotlegs .

关于arrays - 如何在应用程序中的所有类之间共享一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214881/

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