在 Actionscript 3 中实现单例模式类的最佳方法是什么?

2024-04-28

由于 AS3 不允许私有构造函数,因此构造单例并保证构造函数不是通过“new”显式创建的唯一方法是传递单个参数并检查它。

我听说过两个建议,一个是检查调用者并确保它是静态 getInstance(),另一个是在同一包命名空间中拥有一个私有/内部类。

传递给构造函数的私有对象似乎更可取,但看起来不能在同一个包中拥有私有类。这是真的?更重要的是,这是实现单例的最佳方式吗?


对enobrev的答案稍作修改,就是将实例作为吸气剂。有人会说这更优雅。另外,如果您在调用 getInstance 之前调用构造函数,enobrev 的答案将不会强制执行单例。这可能并不完美,但我已经测试过了并且它有效。 (《Advanced ActionScrpt3 with Design Patterns》一书中肯定还有另一种好方法可以做到这一点)。

package {
    public class Singleton {

    private static var _instance:Singleton;

    public function Singleton(enforcer:SingletonEnforcer) {
        if( !enforcer) 
        {
                throw new Error( "Singleton and can only be accessed through Singleton.getInstance()" ); 
        }
    }

    public static function get instance():Singleton
    {
        if(!Singleton._instance)
        {
            Singleton._instance = new Singleton(new SingletonEnforcer());
        }

        return Singleton._instance;
    }
}

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

在 Actionscript 3 中实现单例模式类的最佳方法是什么? 的相关文章

  • std:: 对象/指针/智能指针的向量传递对象(总线错误:10)?

    我想询问一般建议 下面的代码完全编译并大致代表了我处理的代码的结构 简而言之 我想将从一个地方传递一系列从基类 Class1 派生的对象和一些其他参数到另一个地方 更准确地说 实现父类的不同子类 收集这些子类的实例并传递参数进行处理 问题是
  • 可以在一堂课上延长两堂课吗? [复制]

    这个问题在这里已经有答案了 可能的重复 我可以在 PHP 中使用多个类来扩展一个类吗 https stackoverflow com questions 356128 can i extend a class using more than
  • 如何通过继承在Python中子类化请求

    我想专门化 子类化请求包以添加一些具有自定义功能的方法 我尝试这样做 concrete requests py import requests class concreteRequests requests def init self su
  • 使用存储库时,ASP.NET MVC 中业务逻辑的最佳位置是什么?

    在 ASP NET MVC 项目中实现数据库存储库时 将业务逻辑放入其中是否正确 或者将逻辑放入控制器类中可能更好 或者使用额外的服务和帮助程序类来操作数据 最终 除了其自己的层 作为 模型 层的一部分 之外 您的业务逻辑没有一个完美的位置
  • 如何在javascript中实现观察者模式?

    你好 我正在尝试在 JavaScript 中实现观察者模式 我的index js document ready function var ironMan new Movie ironMan setTitle IronMan ironMan
  • 这是重载,不同类中具有相同名称和不同签名的方法吗?

    如果我有以下 Java 代码 class A public int add int a int b return a b class B extends A public float add float a float b return a
  • 将状态上下文作为附加方法参数嵌入到状态中有何优缺点?

    在设计模式的背景下state 嵌入的优点和缺点是什么StateContext作为附加方法参数State 为了更清楚地说明 public void handle Object obj vs public void handle StateCo
  • 如何使用 php __toString

    有什么用途 toString in PHP 例如 我有一个函数 例如 在一个名为 person 的类中 public function construct id name this gt id id this gt name name an
  • 组织 jQuery/JavaScript 代码的最佳方式 (2013) [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 问题 这个答案之前已经回答过 但已经
  • 如何将只缓存某些内容的字段添加到ADT?

    我经常需要向 ADT 添加字段 仅记住一些冗余信息 但我还没有完全弄清楚如何又好又高效地做到这一点 说明问题的最好方法是举个例子 假设我们正在使用无类型 lambda 项 type VSym String data Lambda Var V
  • AngularJS 中的非单例服务

    AngularJS 在其文档中明确指出服务是单例 AngularJS services are singletons 违反直觉的是 module factory还返回一个 Singleton 实例 鉴于非单例服务有很多用例 实现工厂方法以返
  • ReferenceError:错误#1069:属性 box_mc_0

    我试图使用循环隐藏舞台上的影片剪辑 但在发布它时出现以下错误 这只是这个概念的一个示例 var q for q 0 q lt 3 q stage box mc q visible false 错误消息 参考错误 错误 1069 财产box
  • 如何在两个类之间共享数据

    Question 有没有一种方法可以让两个类同时相互继承 背景 我目前正在开发一个 Socket Server 项目 在这个项目中 我有两个课程 一个Server类 以及一个GUI班级 他们的目的是不言自明的 但是 我显然需要让两个班级相互
  • AS3 禁用数据网格内文本输入的可编辑/可选择

    我目前正在尝试禁用可选择 可编辑 或将 textInput 更改为动态以获得我想要的结果 我有一个带有下拉菜单和文本输入区域的自定义数据网格 但是 如果我的 型号 列中没有数据 我不想允许在相应的 购买价格 单元格中输入任何内容 col1
  • 在Python中将字典转换为以键作为对象名称的对象

    我有一本这样的字典 d item1 Hi 150 495 item2 Hola 590 40 我想将其转换为对象 如果可能的话递归地 我有一堂课 class Item def init self thetuple self greeting
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • 带双重检查锁的单例设计模式

    假设您有以下代码 1 为什么我们使用双重检查锁 为什么单锁不够好 请提供详细的例子 2 这种实施方式的主要缺点是什么 我该如何证明呢 Thanks public sealed class SomeSingleton5 private sta
  • 从 Robot Framework 访问 python 类的变量

    我有一个 python 文件 例如 Animals py 在里面我定义了 3 个不同的类 如下所示 Animals py class Animal listAnimal dog cat lt def init self Animal con
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • Flex PopUpManager:如何检测模式弹出窗口的存在?

    我的 Flex 3 应用程序有一些通过 PopUpManager 显示的模式对话框 但有时我希望其他视图组件知道有弹出窗口显示 PopUpManager 没有任何方法来实际检查弹出窗口是否存在 有没有其他方法可以在 flash flex 中

随机推荐