烟酒生-

导航

单例模式

     单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界 访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

 

Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
Java单例模式例子:
public class SingletonClass{
  private static SingletonClass instance=null;
  public static SingletonClass getInstance(){
  if(instance==null){
  synchronized(SingletonClass.class){
  if(instance==null){
  instance = new SingletonClass();
  }
  }
  }
  return instance;
  }
  private SingletonClass(){ }
  }
Singleton模式主要作用是保证在Java中,一个类Class只有一个实例存在。
一般Singleton模式通常有三种形式:
第一种形式: 也是常用的形式。
public class Singleton{
private static Singletoninstance=null;
private Singleton(){
//dosomething
}
public static synchronized SingletongetInstance(){//synchronized用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多有一个线程执行这个段代码。
if(instance==null){
instance=new Singleton();
}
return instance;
}
}

 第二种形式:

public class Singleton{
//在自己内部定义自己的一个实例,只供内部调用
private static final Singletoninstance=newSingleton();
private Singleton(){
//dosomething
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static SingletongetInstance(){
return instance;
}
}

 第三种形式: 双重锁的形式。这段代码只有在JDK1.5以上版本才可正常运行。

public class Singleton{
private static Singletoninstance=null;
private Singleton(){
//dosomething
}
public static  SingletongetInstance(){
if(instance==null){
synchronized(Singleton.class){
if(null==instance){ //这一步必不可少的。如果另外一个线程拿到锁的时候,这个就不等以空了,就直接return.
instance=new Singleton();
}
}
}
return instance;
}
}//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。

 

 

posted on 2014-08-05 11:03  烟酒生-  阅读(94)  评论(0)    收藏  举报