package chap2.test2;
//设计一个类,只能生成该类的一个实例
public class SingletonTest {
//使用同步锁的方式创建
private SingletonTest() {
}
private static SingletonTest instence;
public static SingletonTest getInstence() {
if (instence == null) {
synchronized (SingletonTest.class) {
if (instence == null) {
instence = new SingletonTest();
}
}
}
return instence;
}
public static void main(String[] args) {
SingletonTest3 s2 = SingletonTest3.getInstence();
SingletonTest3 s3 = SingletonTest3.getInstence();
System.out.println(s2 == s3);
}
}
//使用静态方法块
//优于第一种方式:静态方法块只调用一次,不用那么多次比较
class SingletonTest2 {
private SingletonTest2() {
}
private static SingletonTest2 instence = null;
static {
instence = new SingletonTest2();
}
public static SingletonTest2 getInstence(){
return instence;
}
}
//利用私有静态嵌套类
//优于第二种方法:只在获取的时候调用一次,不用就不调,第二种方法只要用类就生成
class SingletonTest3{
private SingletonTest3(){}
public static SingletonTest3 getInstence(){
return Nested.instence;
}
private static class Nested{
public static SingletonTest3 instence = new SingletonTest3();
}
}
Java实现剑指Offer面试题1-单例模式
最新推荐文章于 2022-11-05 00:34:36 发布