单例:
1,将构造函数私有化,这样外界就不能任意的创建类的对象;
2,我们必须给外界提供获得类实例的接口,不然这个类没有什么存在的价值,但是必须保证外界无论怎么取都只能得到同一个实例。
饿汉式:
顾名思义,这种方式会在一开始就创建一个实例。这种方式是线程安全的
package com.flyingduck.test;
public class SingleInstance {
private static SingleInstance instance = new SingleInstance();
private SingleInstance(){}
private static SingleInstance getInstance(){
return instance;
}
}
懒汉式:
线程不安全的:
package com.flyingduck.test;
public class SingleInstance {
private static SingleInstance instance = null;
private SingleInstance(){}
private static SingleInstance getInstance(){
if (instance == null){
instance = new SingleInstance();
}
return instance;
}
}
但是我们可以通过synchronized将它变成线程安全的最简单的方法是:
package com.flyingduck.test;
public class SingleInstance {
private static SingleInstance instance = null;
private SingleInstance(){}
private static synchronized SingleInstance getInstance(){
if (instance == null){
instance = new SingleInstance();
}
return instance;
}
}
方法简单但是不高效。
高效的做法是:
package com.flyingduck.test;
public class SingleInstance {
private static SingleInstance instance = null;
private SingleInstance() {
}
private static SingleInstance getInstance() {
if (instance == null) {
synchronized (SingleInstance.class) {
if (instance == null) {
instance = new SingleInstance();
}
}
}
return instance;
}
}