设计模式之单例模式

通俗解释 

       单例模式,顾名思义,就是说系统中这个类只能有一个实例对象。你在不同的的包里或者不同的的类里获取的对象都是同一个。

如何实现

       那么我们如何实现它呢?我觉得有这么几个要点。

       1.这个类只能有一个实例对象。

       2.我们不能创建这个类的实例,只能它自己创建。

       3.系统必须能够获取它。

       这些都是废话,瞎说的,我们还是直接看代码吧,先写一个小小的例子。那我们就先写一个任务管理器类吧(你能打开两个任务管理器吗?手动滑稽)。为了不让别人随随便便创建这个类,我们就先把构造器私有化。但是我们怎么让系统获取它呢?那就用一个静态变量来保存它,并给它public

看代码:

如此我们就写了简单的单例模式的实现。我们来运行测试一下

我们看到,两次获取的对象都是一样的。说明我们的单例模式还是成功的。

扩展

        当然实现单例模式的方式有很多,这只是其中一种。除此之外呢,我们使用枚举等方式也可以实现单例模式。

        不知道大家有没有发现,我们这种方式是启动的时候直接就把对象创建出来了,有时候我们可能不想让它直接创建出来,而是到使用的时候才把对象创建出来。所以呢,这个单例模式它常见的有这么两种,一种是像我这样直接创建对象的,叫饿汉式,还有一种延迟创建对象的,使用的时候才创建对象,这叫懒汉式。这个懒汉式怎么实现呢,我们还得需要有一个静态变量保存这个对象,但是并不直接实例化,再来一个静态方法进行实例化这个对象并返回它,这样的话,我们只有调用这个静态方法的时候才会创建这个对象,如此便简单的实现懒汉式。不过这样的实现你还要考虑一下线程安全的问题。

        真正的应用场景不会像我这么简简单单的实现。需要考虑的问题有很多,比如线程安全啦,反射攻击啦,反序列化啦等等。里面的学问还挺多呢,我们还得谦虚的深入学习。

应用场景

        应用场景我就举一个例子吧,比如springIOC容器,里面存放的bean默认都是单例模式,当我们要使用的时候直接拿来用就行,我想这样做就避免了我们频繁的创建对象。

好了,水平有限,就说这么多了,重在理解思想嘛

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值