设计模式一分钟之Singleton


使用场景:

单例模式,保证在java中,一个类class只有一个实例存在。

单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”

为什么要使用:

对于系统中某些class,只有一个实例很重要。比如Windows系统的任务管理器,打印机的任务调度程序,同时,可以节约内存使用。

使用方法:

有三种形式:

1. Common initialzation

public class Singleton {

  private Singleton(){}

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问

  public static Singleton getInstance() {

    return instance;

   }

}

2.lazy initialization

public class Singleton {

  private static Singleton instance = null;

      //此处,synchronized 很重要。

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率,但是没有第一种形式安全。

  if (instance==null)

    instance=new Singleton();

  return instance;

    }

}

3. double-check+synchronized

public class Singleton{

    private static volatile Singleton instance=null;

    private Singleton(){

        //do something

    }

    public static  Singleton getInstance(){

      //双重判断+同步块的方法,可以大大提高效率。

        if(instance==null){

            //将同步块放到方法的内部,提高了执行效率

            synchronized(Singleton.class){

                if(instance==null){

                    instance=new Singleton();

                }

            }

        }

        return instance;

     }

}



作者微信公众号 "小强聊架构"。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,549评论 1 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 980评论 1 3
  • 7.19正式学习第一天 上午,顺君老师讲了大明爱红社的发展史。创始人是岳阳的爱红老师,2009年9月,爱红与虚...
    鹅公庄主阅读 546评论 0 8