“小李啊,你在天文史上有的新的突破啊!”BOSS的腔调不像是在夸我。
“啊?”我满脸糊涂。
“你看,我在这天上发现了两个月亮啊!这不是新突破是什么?”BOSS转过它的液晶屏,指着屏幕说道。
“啊!该死!”我暗骂道。。。原来是前几天做了一个游戏项目中,游戏背景的天空中要根据游戏里的时间的不同出现一个与时间相符(形状,大小,位置等)的月亮的情景。当时是我写的月亮这一个类,我当时也没多想,就直接写成了(代码省略了具体实现):
没想到粗心的同事小张在调用我的类时竟在天上new出了两个月亮,最要重的是由于游戏里的时间是一致的,所以这两个月亮不管是形状,大小,位置在同一视有上都重叠了,一般人还真看不出这是两个月亮。可精明的BOSS切换一下视角。。。一下子原形毕露,天空上果然挂着两个月亮!
“这。。。调用时注意点应该没问题吧。。。”这是小张粗心,怎么怪到我头上啦。。我心想。
“类是你写的,你不觉得你应该在技术层上有所防范吗?天上有两个月亮这不应该啊!你这样让客户很担心啊!”BOSS有点语重心长。我知道BOSS这里的客户指的是调用这个类的客户代码。
“这。。。啊。。对了,有个模式可以防范多实例的产生。。。单例模式!”我记得以前看过些设计模式,当时也没留下啥印象,真是灵光一闪啊!
“知道还不快去改善!”BOSS的脸色终于有所缓和。
我连忙回到办公室,把单例模式(Singleton Pattern)重温了一遍,并深入地研究一番。
单例模式(Singleton):保证一个类仅有一个实例并提供一个访问它的全局访问点。
实现方法一:
实现方法二:
这种实现简单,线程安全,缺陷主要是instance不是惰性加载的。准确的说是不一定是惰性加载的,因为我们无法得知instance