每天一学设计模式之单例模式

  “你就是我的唯一,两个世界都变形,回去谈和容易。确定  你就是我的唯一,独自对着电话说我爱你,我真的爱你...”

   单例模式,就是确保唯一,确保某一个类只有一个实例,而且自行实例化,并提供给整个系统。

  

   单例模式有两种常用的实现方式,下面来看一下这两种实现方式的代码:

<pre name="code" class="java">public class Singleton{
      private static final Singleton singleton =  new Singleton();
      //限制产生多个对象
      private Singleton(){}
      //获取实例对象
      public static Singleton getSingleton(){
             return singleton;
      }
      public void doSomething(){//处理代码}
}
 
第一种实现代码如上,这种方式一般被称为饿汉式单例,推荐使用这种方式实现单例;
<pre name="code" class="java"><pre name="code" class="java">public class Singleton{
      private static Singleton singleton =  null;
      //限制产生多个对象
      private Singleton(){}
      //获取实例对象
      public static Singleton getSingleton(){
            if(singleton == null){
                 singleton = new singleton();
             }
             return singleton;
      }
      public void doSomething(){//处理代码}
}
 
 
第二种实现代码如上,这种方式在低并发的情况下不会有什么问题,但是在系统压力增大,并发量增大时内存中可能会出现多个对象实例,破坏了单例的初衷。为了解决
这个问题,我们可以在getSingleton函数上添加synchronized关键字来解决,但都不是最优秀的单例(增加了synchronized的上述单例模式被称为懒汉式单例)。
下面我们来看一下单例模式有哪些优缺点:

优点:由于内存中只产生一个对象,减少内存开支,减少性能开销,避免了对资源的多重占用等;

缺点:单例没有接口,所以扩展很困难;对测试不利,单例没有完成,不能进行测试;与单一职责原则有冲突。

单例模式的适用场景:

单例模式是23个模式中最简单的模式,应用非常广泛,其中最熟知的应该是spring框架中的每个bean默认都是单例的,这样做的优点是Spring容器可以控制这些对象的生命周期。使用单例模式需要注意的是JVM的垃圾回收机制,一旦对象被回收,下次调用将重新创建一个对象,将恢复到最初的状态,对于采用单例来记录有状态值的情况,将会出现故障,遇到这个问题,我们可以在程序中做好随时保存状态值的准备。

好了,这是我的第一篇博客,也是我学习的成果,参照了《设计模式之禅》这本书。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值