单例模式
单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
优点:
⑴实例控制:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
⑵灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程。
实现方式:
①饿汉式:线程安全,但效率比较低
public class MySingleton {
private MySingleton() {
}
private static final MySingleton instance = new MySingleton();
public static MySingleton getInstance() {
return instance;
}
}
②饱汉式:非线程安全
public class MySingleton {
private MySingleton() {
}
private static MySingleton instance;
public static MySingleton getInstance() {
if (instance == null) {
instance = new MySingleton();
}
return instance;
}
}
③线程安全,但是效率非常低
public class MySingleton {
private MySingleton() {
}
private static MySingleton instance;
public static synchronized MySingleton getInstance() {
if (instance == null) {
instance = new MySingleton();
}
}
}
④线程安全,效率高
public class MySingleton {
private static MySingleton instance;
private MySingleton() {
}
public static MySingleton getInstance() {
if (instance == null) {
synchronized (MySingleton.class) {
if (instance == null) {
instance = new MySingleton();
}
}
}
}
}