Java写⼀个单例模式(Singleton)出来第⼀种:饱汉模式
public class SingleTon {
private SingleTon(){
}
//实例化放在静态代码块⾥可提⾼程序的执⾏效率,但也可能更占⽤空间
private final static SingleTon instance = new SingleTon();
public static SingleTon getInstance(){
return instance;
}
}
第⼆种:饥汉模式
public class SingleTon {
private SingleTon(){
}
private static instance = null;//new SingleTon();
public static synchronized SingleTon getInstance(){
if(instance == null){
instance = new SingleTon();
}
return instance;
}
}
第三种:⽤枚举
public enum SingleTon{
ONE;
}
下⾯介绍⼀下实际应⽤(在什么情况下⽤单例)
public class SequenceGenerator{
private int count = 0;
//下⾯是把该类变成单例的代码
private SequenceGenerator(){
}
private final static instance = new SequenceGenerator();
public static SequenceGenerator getInstance(){
return instance;
}
//下⾯是该类⾃⾝的业务功能代码
public synchronized int getSequence(){
++count;
}
}
public class MemoryDao{
private HashMap map = new HashMap();
public void add(Student stu1){
map.Instance().getSequence(),stu1);
}
//把MemoryDao变成单例
}
Singleton模式主要作⽤是保证在Java应⽤程序中,⼀个类Class只有⼀个实例存在。 ⼀般Singleton模式通常有⼏种种形式:
第⼀种形式: 定义⼀个类,它的构造函数为private的,它有⼀个static的private的该类变量,在类初始化时实例话,通过⼀个public的getInstance⽅法获取对它的引⽤,继⽽调⽤其中的⽅法。
public class Singleton {
private Singleton(){
}
  //在⾃⼰内部定义⾃⼰⼀个实例,是不是很奇怪?
  //注意这是private 只供内部调⽤
  private static Singleton instance = new Singleton();
  //这⾥提供了⼀个供外部访问本class的静态⽅法,可以直接访问 
  public static Singleton getInstance() {
    return instance;   
  }
}
第⼆种形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
      //这个⽅法⽐上⾯有所改进,不⽤每次都进⾏⽣成对象,只是第⼀次   
      //使⽤时⽣成实例,提⾼了效率!
      if (instance==null){
instance=new Singleton();
}
return instance;   
}
}
其他形式:
单例模式的几种实现方式定义⼀个类,它的构造函数为private的,所有⽅法为static的。 ⼀般认为第⼀种形式要更加安全些

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。