我知道Stack Overflow的朋友们不喜欢"对比"的问题,但是......即使稍微改一下标题,"对比"部分仍然存在,那么为什么要隐藏它呢。
基本上,我想知道何时以及为什么应该使用单例模式或静态类,单例模式能提供什么静态类不能提供的东西,反之亦然。
很长一段时间我都使用了两种模式,但我看不出为什么我不应该使用其中的一个。
谢谢。
我知道Stack Overflow的朋友们不喜欢"对比"的问题,但是......即使稍微改一下标题,"对比"部分仍然存在,那么为什么要隐藏它呢。
基本上,我想知道何时以及为什么应该使用单例模式或静态类,单例模式能提供什么静态类不能提供的东西,反之亦然。
很长一段时间我都使用了两种模式,但我看不出为什么我不应该使用其中的一个。
谢谢。
这两者基本上都是带有注意事项的全局变量。静态类防止继承,而单例模式则不美观,且会在属性查找时增加开销。这两者都会使自动化测试变得困难。
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();
}
[Inject] public var log:ILogger;
怎么可能不易读呢? - weltraumpirat