Singleton强制类?

时间:2011-04-18 14:10:03

标签: flex actionscript adobe

使用Singleton Enforced类的目的是什么,是否有人有任何关于如何创建/使用它们的示例?

有人告诉我,我可以通过这个想法来做全局变量(会话),这是真的吗?

2 个答案:

答案 0 :(得分:2)

Singleton Pattern的目的是确保只存在某个对象的单个实例。它通常用于flex以将Global State添加到项目中。换句话说,它允许您执行诸如设置之类的操作,并可以从应用程序的任何位置访问全局变量。

package {

  [Bindable]
  public final class AppGlobals {

    public static var _instance:AppGlobals;

    public function AppGlobals( enforcer:SingletonEnforcer ){
      if( enforcer == null ){
        throw new Error( "You can only have one active instance of AppGlobals.");
      }
    }

    public static function getInstance():AppGlobals {
      if( _instance == null ) _instance = new AppGlobals( new SingletonEnforcer );
      return _instance;
    }

  }

}

class SingletonEnforcer {}

要使用此功能,您应该在应用程序的最高级别(main.mxml或任何顶级级别)实例化AppGlobals,方法如下:

private var _appGlobals:AppGlobals = AppGlobals.getInstance();

然后,在您的应用程序中的任何位置,您都可以以相同的方式实例化AppGlobals的副本,并且可以访问全局信息状态。

要回答问题的第二部分,是的,您可以使用它来设置应用程序中的全局会话变量。有些人争论这是否是解决这个问题的最佳方法(当然不是每种情况都不理想),但我发现它很有用。

希望这有帮助!

答案 1 :(得分:2)

请记住以下内容。 Singleton不应解决应用程序设计的缺乏问题并将其用作全局切入点。 Sinltone唯一有效的用法是确保是否有只有一个特定类的实例(另请参阅Multiton来控制实例数)。

因此,在决定使用Singleton之前,您应该三思甚至更多次。你应该限制特定类的实例数吗?如果有多个单个实例会怎样 - 它会破坏域模型还是什么?

无论如何,不​​要使用Singletons和静态来解决架构问题,以获得全局切入点。使用Singltones,您可以在将来重构应用程序时花费大量时间。