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

2024-01-15

我想共享一个数组,所有类都可以“获取”和“更改”该数组内的数据。类似于全局数组或多路访问数组。这如何通过 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'

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

依赖注入

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

一个非常流行的 AS3 DI 框架是机械腿 http://www.robotlegs.org/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在应用程序中的所有类之间共享数组? 的相关文章

  • 熊猫:什么是视图?

    请帮助我理解 什么是view在熊猫中 我知道如果我们改变一些东西view我们总是对原始对象进行更改 但物体的视图和原始物体有不同id s例如 这是否意味着view是另一个对象引用原始对象吗 机制是什么 我尝试过但找不到解释 import p
  • 用户输入数组大小 C [重复]

    这个问题在这里已经有答案了 编写一个程序 要求用户输入数组大小 n 的值 并用 n 个整数填充数组 然后反转数组并将其打印在屏幕上 我正在使用 Visual Studio 并到目前为止 我在 int arr1 size 中遇到 size 问
  • 表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

    此错误发生在运行时 我不确定是什么原因导致的 代码对我来说看起来是正确的 include
  • 将文件内容存储到数组中

    我的刽子手程序有问题 我真的认为我需要做的事情超出了我对java的理解 这是我的代码 import java io BufferedReader import java io FileReader import java io FileNo
  • C 中带有指针的 For 循环

    我不明白指针在其中的作用for loop 什么是 p在下面的循环中做什么 char str 128 Some Text char p for p str p what does this mean p Code 其余的我都明白 但为什么不明
  • 如何在 PHP 中比较两个数组并列出差异?

    我正在构建一个表单来执行以下操作 打印从 MySQL 获取的用户和权限表 用户拥有的每一项权限都是一个复选框 而他们缺少的每一项权限都是一个未选中的复选框 允许管理员选中和取消选中复选框以授予或删除权限 提交表单后 显示一个确认页面 其中仅
  • 如何使用现有列表创建二维数组?

    例如 我有一个名为 mazeline 的 txt 数据 如下所示 abcd cdae korp 所以我首先列出了 3 个清单 mazeline readmaze split mline0 list mazeline 0 mline1 lis
  • Java 泛型从类创建数组

    我有一个层次结构 其中正方形 三角形和圆形都从形状延伸 我有一个工作方法 public void someMethod File file new File File with squares ThirdPartyClass foo new
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • 如何在 JavaScript 中对关联数组进行排序?

    我需要为我的一个项目通过 JS 对关联数组进行排序 我发现这个函数在 Firefox 中运行得很好 但不幸的是它在 IE8 OPERA CHROME 中不起作用 无法找到使其在其他浏览器中运行的方法 或者找到另一个适合该目的的函数 我真的很
  • WordPress 中的 add_action 函数

    嗯 我正在学习创建一个 WordPress 插件 我下载了一个并阅读了代码 然后我看到了这个 我假设 foo 是它将添加操作的标签 但是 array 到底是做什么的呢 add action foo array foo1 foo2 我在看ht
  • Android:如何在播放媒体(mp3)时在特定毫秒内显示文本

    我正在尝试做一个类似卡拉 OK 的应用程序 我想在某一毫秒到来时显示一个或多个单词 例如 1148 毫秒 gt 打印 尼古拉斯 1826 毫秒 gt 打印 是 2766 毫秒 gt 打印 旧 ms gt 显示 这是我的代码 包 com ex
  • 最好的 Flash 音频/视频 + 交互服务器?

    我正在寻找有关 Flash 实时服务器的建议 目前 我们使用 Moock 的组合Unity http www moock org unity and Red5 http osflash org red5 但有几个问题 首先 我们正在转向 A
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • Repa 数组上的并行 mapM

    在我最近的work https github com bgamari mixture model with Gibbs sampling 我一直在充分利用RVar http hackage haskell org packages arch

随机推荐

  • 手动将搭配添加到 gensim 短语器

    我正在对语言学论文进行主题建模 并使用 Gensim 短语来识别频繁的搭配 我希望能够将术语 do support 和 it clefts 标记为一个单词 因为它们是特定的语言术语 但是 如果我在取出停用词后制作 Gensim 模型 则不会
  • MSHTML:CreateDocumentFromString 而不是 CreateDocumentFromUrl

    我想使用 MSHTML 库来解析字符串变量中的一些 HTML 但是 我不知道该怎么做 我可以轻松解析给定已知 URL 的网页内容 但不能直接解析源 HTML 这可能吗 如果是这样 怎么办 Public Sub ParseHTML sHTML
  • 身份验证和资源服务器之间的 OAuth v2 通信

    我在理解 OAUTH v2 的工作原理时遇到一些困难 The OAuth 版本 2 规范 https datatracker ietf org doc html draft ietf oauth v2 16 section 7 reads
  • 反射式获取项目中的所有包?

    如何反思性地获取项目中的所有包 我从 Package getPackages 开始 但这只获取了与当前包关联的所有包 有没有办法做到这一点 PhilippWendler 的评论让我找到了一种完成我需要的方法 我稍微调整了该方法以使其递归 R
  • 错误 4:从“错误”中选择“消息”,其中“错误”= 1707(也是 1709)

    我使用 WiX 3 8 创建了一个 MSI 安装程序 安装时在 MSI 日志的最后出现此错误 Property C WIXUI INSTALLDIR VALID 1 Logging stopped 8 20 2014 19 15 03 No
  • Keycloak - Infinispan Redis 缓存存储

    目前正在以standalone ha模式设置keycloak集群 以便能够在docker swarm上运行 在 keycloak 中 用户会话缓存在嵌入式 infinispan 存储中 并且 infinispan 可以配置为跨集群的分布式缓
  • 函子定律是否证明了结构的完全保留?

    在文档中数据函子 http hackage haskell org package base docs Data Functor html以下两条被规定为函子法则 所有函子都应遵守 fmap id id fmap f g fmap f fm
  • makecontext 参数 #2 的 C++0x lambda

    我在将 C 0x lambda 函数作为第二个参数传递给makecontext 来自 ucontext h 的签名makecontext is void makecontext ucontext t void int 以前 我能够应用 C
  • 忽略模糊匹配并使用 javascript 添加精确的单词模式匹配

    我正在尝试为我的网站创建一个文本突出显示选项 但我想要精确的单词匹配而不是模糊的单词匹配 我的代码匹配所有类型的实例 并且存在一些区分大小写的问题 如果我们以 Jfiddle 为例 我只想添加这个词cancer 区分大小写不应该成为问题 并
  • 如何从维基百科中获取纯文本

    我想编写一个仅获取维基百科描述部分的脚本 也就是说 当我说 wiki bla bla bla 它将转到维基百科页面为bla bla bla http en wikipedia org wiki Bla Bla Bla 获取以下内容 并将其返
  • 如何在运行时获取NHibernate在代码中生成的SQL?

    我知道您可以通过将 NHibernate 生成的 SQL 连接到 log4net 或通过管道将其输出到控制台 show sql 选项 来查看 NHibernate 生成的 SQL 但是有没有办法在运行时在代码中获取生成的 SQL 我希望能够
  • Excel VBA - 网页抓取 - 获取 HTML 表格单元格中的值

    我正在尝试创建一个宏来抓取货物跟踪网站 但我必须创建 4 个这样的宏 因为每家航空公司都有不同的网站 我是 VBA 和网页抓取的新手 我已经整理了适用于 1 个网站的代码 但当我尝试将其复制到另一个时 我陷入了循环 我想这可能是我指代该元素
  • Excel VBA:将计算结果数组作为参数传递给函数

    我有一个接受数组的 VBA 函数 如果我向它传递一个引用 例如A1 A10 它不接受 公式 参数 例如A1 A10 1 or A1 A10 2 生成的单元格包含 VALUE 许多Excel函数都支持这一点 例如linest 我可以编写以下公
  • 如何解决 R Markdown (Knit)“‘closure’不可子集化”?

    我第一次尝试使用 RMarkdown Knit 来生成 pdf 默认文件 文件 gt 新建文件 gt R Markdown 运行良好 它显示编译时生成的 pdf 例如 运行以下代码 r cars summary cars 但是 如果我只是用
  • Meteor collection.insert回调问题

    根据 Meteor 文档 collection insert doc callback callback功能 选修的 如果存在 则使用错误对象作为第一个参数和 id 作为第二个参数进行调用 然后往下 在服务器上 如果您不提供回调 则插入块直
  • Unity单例代码

    我是新来的Unity http unity codeplex com 我正在尝试编写一些 Unity 逻辑来初始化和注册 解析 Email 对象的单例实例 以便它可以在多个其他对象中使用 下面的一个示例是 OperationEntity 因
  • Microsoft.ML 和 Xamarin

    Microsoft ML 在 Xamarin 中工作吗 我已经关注了许多教程和视频https dotnet microsoft com learn ml dotnet https dotnet microsoft com learn ml
  • 如何使用JAVA从html页面获取表格

    我正在开发一个项目 尝试从互联网获取财务报表并在 JAVA 应用程序中使用它们来自动创建比率和图表 我正在使用的网站使用登录名和密码才能进入牌桌 标签是 TBODY 但 html 中还有另外 2 个 TBODY 如何使用 java 将表打印
  • Matplotlib - 添加与轴底部对齐的标签

    我想向图表上的垂直线添加标签 本例中为洋红色线 TEXT TO GO HERE 问题是我不知道 Y 轴的最小值 因为该轴是自动的 并且 text 函数需要 x 和 y 值 我希望能够将文本与图的底部对齐 或者找到最小 Y 轴值 在本例中 m
  • 如何在应用程序中的所有类之间共享数组?

    我想共享一个数组 所有类都可以 获取 和 更改 该数组内的数据 类似于全局数组或多路访问数组 这如何通过 ActionScript 3 0 实现 有几种方法可以解决这个问题 一种是使用全局变量 如 unkiwii 的答案中所建议的 但这在