这是写的第一个,为什么呢?只因为耳熟能详。当然对于单例模式来说还分好几种,不多说,只是简单的懒汉饿汉吧。
1.饿汉式(大部分情况下这一种又安全又好用)
public class Singleton {
private static Singleton singleton= new Singleton();
private singleton() {
}
public static Singleton newInstance() {
return singleton;
}
}
2.懒汉式(延迟加载,多线程初次有不安全的风险)
public class Singleton{
private static Singleton singleton;
private Singleton() {
}
public synchronized static Single newInstance() {
if (singleton== null) {
singleton= new Singleton();
}
return singleton;
}
}
3、双重检查加锁
public class Singleton {
private volatile static Singleton singleton;
private Singleton() {
}
public static Singleton newInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
这个是懒汉形式的加强版,将synchronized关键字移到了newInstance方法里面,同时将singleton对象加上volatile关键字,这种方式既可以避免多线程问题,又不会降低程序的性能。但volatile关键字也有一些性能问题,不建议大量使用。
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
菜鸟教程单例模式