我知道朋友们不喜欢“对抗”问题,但是……即使改写一下标题,对抗部分仍然存在,所以,为什么要隐藏它。
基本上,我想知道何时以及为什么应该使用单例或静态类,什么可以提供静态类无法提供的单例,反之亦然。
很长一段时间我都使用了这两种方法,但我看不出为什么我不应该使用另一种。
谢谢。
我知道朋友们不喜欢“对抗”问题,但是……即使改写一下标题,对抗部分仍然存在,所以,为什么要隐藏它。
基本上,我想知道何时以及为什么应该使用单例或静态类,什么可以提供静态类无法提供的单例,反之亦然。
很长一段时间我都使用了这两种方法,但我看不出为什么我不应该使用另一种。
谢谢。
两者基本上都是带有警告的全局变量。静态类阻止继承,而单例很丑陋,并且通过属性查找增加了开销。两者都使自动化测试变得困难。
AS3 支持全局变量,那么为什么不使用它们呢?
静止的:
package com.example
{
public class Config
{
public static var VERSION:uint = 1;
}
}
单身人士:
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
}
}
}
全局变量:
package com.example
{
public var config:Config = new Config();
}
class Config
{
public var version:uint = 1;
}
现在,假设您在生产应用程序中只需要该类的一个实例,但您需要多个实例来编写测试。您可以创建一个公共课程Config
,并使用它com.example.config = new Config()
来重置。所有引用你的全局变量的地方现在都在使用新的实例,你甚至可以做一些花哨的事情,比如继承。
例如:
if(inDebugMode)
{
com.example.config = new DebugConfig();
}
{
com.example.config = new Config();
}