标签:zed main 一个 off method print hand enum 私有
面试题 2. 实现 Singleton模式
Code
1.饿汉模式
//饿汉模式
public class Singleton1 {
//私有化构造方法
private Singleton1(){}
private static Singleton1 instance = new Singleton1();
public static Singleton1 getInstance1(){
return instance;
}
}
2.饿汉模式、变种
//饿汉模式、变种
public class Singleton2 {
//私有化构造方法
private Singleton2(){}
private static Singleton2 instance = null;
static{
instance = new Singleton2();
}
public static Singleton2 getInstance2(){
return instance;
}
}
3.懒汉、线程不安全
//懒汉、线程不安全
public class Singleton3 {
//私有化构造方法
private Singleton3(){}
private static Singleton3 instance = null;
public static Singleton3 getInstance3(){
if(instance==null){
instance = new Singleton3();
}
return instance;
}
}
4.懒汉、线程安全
//懒汉、线程安全
public class Singleton4 {
//私有化构造方法
private Singleton4(){}
private static Singleton4 instance;
public static synchronized Singleton4 getInstance4(){
if(instance==null){
instance = new Singleton4();
}
return instance;
}
}
5.静态内部类
//静态内部类
public class Singleton5 {
//私有化构造方法
private Singleton5(){}
//静态内部类
private static class SingletonHandler{
private static final Singleton5 INSTANCE = new Singleton5();
}
public static Singleton5 getInstance5(){
return SingletonHandler.INSTANCE;
}
}
6.枚举
//枚举
public enum Singleton6 {
INSTANCE;
public void whateverMethod() {
}
}
7.双重校验锁
//双重校验锁
public class Singleton7 {
//私有化构造方法
private Singleton7(){}
private volatile static Singleton7 instance;
public static Singleton7 getInstance7(){
if(instance==null){
synchronized(Singleton7.class){
if(instance==null){
instance = new Singleton7();
}
}
}
return instance;
}
}
测试类
public class Test {
public static void main(String[] args) {
Singleton1 instance1 = Singleton1.getInstance1();
Singleton1 instance2 = Singleton1.getInstance1();
System.out.println("单例模式一:"+(instance1==instance2));
Singleton2 instance3 = Singleton2.getInstance2();
Singleton2 instance4 = Singleton2.getInstance2();
System.out.println("单例模式二:"+(instance3==instance4));
Singleton3 instance5 = Singleton3.getInstance3();
Singleton3 instance6 = Singleton3.getInstance3();
System.out.println("单例模式三:"+(instance5==instance6));
Singleton4 instance7 = Singleton4.getInstance4();
Singleton4 instance8 = Singleton4.getInstance4();
System.out.println("单例模式四:"+(instance7==instance8));
Singleton5 instance9 = Singleton5.getInstance5();
Singleton5 instance10 = Singleton5.getInstance5();
System.out.println("单例模式五:"+(instance9==instance10));
Singleton6 instanceOne = Singleton6.INSTANCE;
Singleton6 instanceTwo = Singleton6.INSTANCE;
System.out.println("单例模式五:"+(instanceOne==instanceTwo));
Singleton7 instance11 = Singleton7.getInstance7();
Singleton7 instance12 = Singleton7.getInstance7();
System.out.println("单例模式七:"+(instance11==instance12));
}
}
结果
单例模式一:true
单例模式二:true
单例模式三:true
单例模式四:true
单例模式五:true
单例模式五:true
单例模式七:true
【剑指offer】面试题 2. 实现 Singleton模式
标签:zed main 一个 off method print hand enum 私有
原文地址:https://www.cnblogs.com/hglibin/p/9026546.html