单例模式
特点:只能有一个实例,单例模式的实例必须是自己创建,要给其他对象提供这一实例。
分类:懒汉式和饿汉式
饿汉式相对实现比较简单:上来先创建一个类的实例,然后定义成构造方法私有化,不让其他类再创建该类的实例。
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;
}
}
注:个人觉得第四种实现方式相对比较好,不仅实现了线程安全,相对也不会出现多次判断同步锁带来的性能影响。
注:这是本人看了一些文章总结出的几种常见的单利模式,不喜勿喷。