使用Singleton Enforced类的目的是什么,是否有人有任何关于如何创建/使用它们的示例?
有人告诉我,我可以通过这个想法来做全局变量(会话),这是真的吗?
答案 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,您可以在将来重构应用程序时花费大量时间。