/**
* 测试单例模式:恶汉式 * 有点:线程安全,效率低,类一加载的时候就new对象 * @author codeMan * */public class SingletonDemo1 { private static SingletonDemo1 instance=new SingletonDemo1(); private SingletonDemo1(){ } public static SingletonDemo1 getInstance(){ return instance; } public static void main(String[] args) { }}
/**
* 测试单例模式:懒汉式 * 有点:线程安全,效率高,类一加载的时候就new对象 * @author codeMan * */public class SingletonDemo2 { private static SingletonDemo2 instance; private SingletonDemo2(){ }/* public static synchronized SingletonDemo2 getInstance(){ if(null==instance){ return instance=new SingletonDemo2(); } return instance; }*/ //资源不够优化,可以进行双重检查,注释部分 public static SingletonDemo2 getInstance(){ //双重检查,提高效率 if(null==instance){ synchronized (SingletonDemo2.class) { if(null==instance){ instance=new SingletonDemo2(); } } } return instance; }}
/**
* 单例模式:静态内部类实现单例 * 优点:线程安全的,懒加载。 * 静态内部类不会被加载,用到的时候才会被加载 * @author codeMan * */public class SingletonDemo3 { private static class SingletonClassInstance{ private static SingletonDemo3 instance=new SingletonDemo3(); } private SingletonDemo3(){ } public static SingletonDemo3 getInstance(){ return SingletonClassInstance.instance; }}/**
* 单例模式:枚举 * 优点:线程安全的,不懒加载,可以防止反序列化和反射。 * 静态内部类不会被加载,用到的时候才会被加载 * @author codeMan * */public enum SingletonDemo4 { INSTANCE; public void operation(){ System.out.println("operation()...."); }}