单例模式几点思考

  • 单例模式的主要特点是使用一个实例,那为什么不使用静态类:
  1.  静态方法中产生的对象会在执行后被释放,被GC清理,不会一直存在于内存中,且静态方法会多次初始化和释放,占用资源
  2. 单例模式一般需要长存内存中,节约资源
  3. 静态一般用于全局范围访问,单例多见于工厂模式或者窗体等
  • 枚举方式,较为推荐
  1. 枚举特点:不继承Object类,继承了Enum类,是一个抽象类;属性大写且必须位于前面构造方法必须私有;可以和普通类一样实现普通方法
  2. //单例
    enum Singleton{
        INSTANCE;
        public void otherMethods(){
           //other codes
        }
    }
    
    //调用
    Singleton.INSTANCE.otherMethods();

    可以在这个枚举私有构造方法里面调用打印语句测试一次,不管执行多少次里面的方法始终只打印一次

  • 双重校验锁法

public class BankDaoFactory {
	private static volatile BankDaoFactory baf = null;
	private BankDaoFactory() {
	}
	public static BankDaoFactory getInstance() {
       if (baf == null) {//双重校验
    	   synchronized(BankDaoFactory.class){
    		   if(baf == null){//双重校验
    			   baf=new BankDaoFactory();
    		   }
    	   }
       }
       return baf;
	}
}
  • 静态内部类实现
public class Singleton {
    private static Holder{//静态内部类
        private static Singleton instance=new Singleton();//需要采用单例的对象
    }
    private Singleton(){
        System.out.println("Singleton has loaded");
    }
    public static Singleton getInstance(){
        return Holder.instance;
    }
    //
}

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/100187139