单例模式四大原则:
1.构造器必须私有化,私有化后类加载一次后无法在通过其他手段创建对象。
2.通过方法或枚举获取对象,在类加载时实例化对象,且无法通过外部手段创建额外对象。
3.确保实例只有一个,尤其是多线程环境。
4.确保反序列换时不会重新构建对象。
单例模式的特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式分类:
饿汉模式:线程安全,但是存在资源消耗,类加载时创建对象。
/**
* 单例模式(饿汉模式)
* 线程安全的,类加载时就分配了资源
*/
public class HungrySingletonPattern {
private static HungrySingletonPattern singleton = new HungrySingletonPattern();
private HungrySingletonPattern (){
}
public static HungrySingletonPattern getInstall() throws InterruptedException {
Thread.sleep(1000);
return singleton;
}
}
测试:
public class Test {
public static void main(String[] args) {
for(int i = 0;i < 10; i++){
new Thread(()->{
try {
HungrySingletonPattern singletonPattern = HungrySingletonPattern.getInstall();
System.out.println(singletonPattern);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
}
输出:
com.wonder.cube.test.designmode.HungrySingletonPattern@4388eabf
com.wonder.cube.test.designmode.HungrySingletonPattern@4388eabf
com.wonder.cube.test.designmode.HungrySingletonPattern&#