单例设计的目的是使某个类在内存中只存在一个实例,说白了也就是限制了构造方法的使用。
那么怎么实现呢?第一就是限制构造方法的使用,声明为private类型的就可以了。
那这样的话用户就一个实例也没法生成了,所以还应该提供一个public函数供用户获取实例。
那么这个实例是怎么产生的呢?既然用户不能生成,那么肯定是在类里面生成的啦。
单例设计的有两种方式:饿汉式和懒汉式。
下面分别用两种方式实现单例设计模式(实现语言Java)。
饿汉式:
- public class SingleMode
- {
- private final static SingleMode instance = new SingleMode();
- private SingleMode()
- {
- }
- public SingleMode getInstance()
- {
- return instance ;
- }
- }
懒汉式:
public class SingleMode
{
private static volatile SingleMode instance=null;
private SingleMode()
{
}
public SingleMode getInstance()
{
if(instance == null)
{
synchronized(SingleMode.class)
{
if(instance == null)
{
instance = new SingleMode();
}
}
}
return instance ;
}
}
总结: 懒汉式的好处是可以延迟对象的加载,不好的地方是每次获取实例是都要进行非空判断,降低了效率, 这里使用了双重判断来提高getInstance方法的效率,只有在第一次调用时需要加锁,以后调用都不需要加锁 。这里加锁是考虑到了多线程同步的问题,保证并发访问时不出现问题。