自从知道了Singleton(参见GOF《设计模式》)这种模式之后,还没来得及有深入的理解,我就开始了对这个模式的滥用。
各种地方,尤其是在涉及到提供底层服务的地方,我都喜欢使用Singleton,用以标榜“我这个只能有一个啊”。。。
然而实际上,Singleton的使用应当慎之又慎——因为其实Singleton是全局变量的一种变体,而全局变量的使用会导致很严重的依赖性问题(可以参考Lokas《大规模C++程序设计》)。除非你真的能够确定这个对象系统中有且仅应有一份拷贝,而且能够肯定以后需要它的第二份拷贝的可能性非常低,否则都不要使用该模式。
使用了Singleton之后,缺省的会提示使用者:系统中该对象仅此一家,别无分店,可以放心大胆的使用,我们可以保证你对它的改动对系统其它部分产生涟漪式影响。然而一旦你的决策错误,在未来的某个时刻发现,系统中需要除此而外的第二份拷贝,对该模式的任何修改都将对整个系统产生“地震”式的影响,甚至有时候你会无奈的发现,进行这样的改动简直是不可能的。
这也可以说是Singleton自身的局限性之一,但更多的原因还是在于使用者的滥用,毕竟GOF已经提醒过我们了。再次以切身经历提醒大家,对Singleton的使用要慎重,当你没把握的时候还是不要用为妙。