【23种设计模式】单例模式

【23种设计模式】单例模式


单例模式需要保证,构造方法一定是私有化的,并且类的全局变量必须是静态的,私有的;这样才能有唯一的实例化途径

懒汉式

错误代码一:
	public class Singleton {
    //如果不设置成静态的,无法在getInstance方法中直接引用
    private Singleton singleton;
    private  Singleton(){ }
    public static  Singleton getInstance(){
        /**
         * 如果类的变量设计在这里,那么等于,每次调用这个方法,
         * 都是在重新定义变量,并不符合单例模式的特征
         * */
        Singleton singleton = new Singleton();
        return  singleton;
    }
}

上述方法,并没有把类变量singleton设置为静态的,这样,如果想在getInstance方法中使用,则必须重新定义变量,并对其进行实例化,这样,类中的private Singleton singleton;就无用了,同时,也就不能保证只有一个singleton对象了。

错误代码二:
public class Singleton {
  
    private Singleton singleton;
 
    private Singleton singleton = new Singleton();
    private  Singleton(){ }
  
    public static Singleton getInstance(){
        Singleton singleton = new Singleton().singleton;
        return  singleton;
    }
}

碰到判断题,看见这种写法,运行用==测试了之后发现是true,顿时陷入了迷茫,后来经朋友提醒才发现,此时调用getInstance赋值的对象其实是null,也就是null == null

饿汉式

class HungurySingleton {
	private static HungurySingleton  hungurySingleton  = new HangurySingleton() ;
	private HungurySingleton (){}
	public HungurySingleton  getInstance(){
		return hungurySingleton;
	}
}

饿汉式和懒汉式的区别在于懒汉式是使用时才进行加载,饿汉式是在类加载时已经加载好了的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值