Both are basically global variables with caveats. Static classes prevent inheritance, and Singletons are ugly and add overhead with a property lookup. Both make automated testing difficult.
AS3 supports global variables, so why not use those?
Static:
package com.example
{
public class Config
{
public static var VERSION:uint = 1;
}
}
Singletons:
package com.example
{
public class Config
{
public static var instance:Config = new Config();
public var version:uint = 1;
public function Config()
{
//Boiler plate preventing multiple instances
}
}
}
Global variable:
package com.example
{
public var config:Config = new Config();
}
class Config
{
public var version:uint = 1;
}
Now, let's say even though you only want a single instance of the class in your production app, you need multiple instances to write tests. You can make a public class Config
, and use com.example.config = new Config()
to reset. All the places that reference your global variable are now using the new instance, and you can even do fancy things like inheritence.
For example:
if(inDebugMode)
{
com.example.config = new DebugConfig();
}
{
com.example.config = new Config();
}