在 GoF 的 23 种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西
越容易出现问题。下面就单例设计模式详细的探讨一下。
所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是
Java Web 中的 application,也就是提供了一个全局变量,用处相当广泛,比如保存全
局数据,实现全局性的操作等。
1. 最简单的实现
首先,能够想到的最简单的实现是,把类的构造函数写成 private 的,从而保证别的
类不能实例化此类,然后在类中提供一个静态的实例并能够返回给使用者。这样,使用者
就可以通过这个引用使用到这个类的实例了。
publicclassSingletonClass{
privatestaticnalSingletonClassinstance=newSingletonClass();
publicstaticSingletonClassgetInstance(){
returninstance;
}
privateSingletonClass(){
}
}
如上例,外部使用者如果需要使用 SingletonClass 的实例,只能通过
getInstance()方法,并且它的构造方法是 private 的,这样就保证了只能有一个对象存
在。
2. 性能优化——lazy loaded
上面的代码虽然简单,但是有一个问题——无论这个类是否被使用,都会创建一个
instance 对象。如果这个创建过程很耗时,比如需要连接 10000 次数据库(夸张了…:-)),
并且这个类还并不一定会被使用,那么这个创建过程就是无用的。怎么办呢?
为了解决这个问题,我们想到了新的解决方案:
评论0
最新资源