单例模式(java)

来源:互联网 发布:unity3d 离线安装 编辑:程序博客网 时间:2024/06/10 03:14

单例模式

特点:只能有一个实例,单例模式的实例必须是自己创建,要给其他对象提供这一实例。

分类:懒汉式和饿汉式

饿汉式相对实现比较简单:上来先创建一个类的实例,然后定义成构造方法私有化,不让其他类再创建该类的实例。

public class Singleton{
private singleton();

private static final Singleton s = new Singleton();

public static Singleton getInstance(){
return s;

}

}

饿汉式相对实现比较多:

1)该方式实现的比较基础,但是不能够实现实现线程安全

public class Singleton{

private singleton(){
}

private static Singleton  s =null;

public static Singleton getInstance(){

if(s==null){
 s = new Singleton();

}

return s;

}

2)该方式是第一种方式的改进版加上一个关键词synchronized

public class Singleton{

private singleton(){
}

private static Singleton  s =null;

public synchronized static Singleton getInstance(){

if(s==null){
 s = new Singleton();

}

return s;

}

3)第三种方式采用的是双重检索的方式,这种方式可以减少同步锁带来的性能影响

public class Singleton{

private singleton(){
}

private static Singleton  s =null;

public  static Singleton getInstance(){

if(s==null){

synchronized(Singleton.class){

if(s==null){
 s = new Singleton();

}

}

}

return s;

}

4)第四种方式使用的是静态内部类的方式,这种方式使用的主要是静态内部类的方式.。

public class Singleton{

private singleton(){
}

public static  class Sin{

private static final Singleton s = new Singleton();

}

public static Singleton getInstance(){

return Sin.s;

}

}

注:个人觉得第四种实现方式相对比较好,不仅实现了线程安全,相对也不会出现多次判断同步锁带来的性能影响。

注:这是本人看了一些文章总结出的几种常见的单利模式,不喜勿喷。

原创粉丝点击