专栏首页云霄雨霁设计模式----单例模式

设计模式----单例模式

单间模式:

确保一个类只有一个实例,并提供一个全局访问点。

如果需要一个类只能创建一个对象,可以使用单件模式。

经典的单件模式实现:

public class Singleton{
    //利用一个私有静态变量记录该类的唯一实例
    private static Singleton uniqueInstance;
    ...    //其他变量

    //构造器定义为私有,只有自Singleton类内部才能调用
    private Singleton(){}
    //利用一个静态方法实例化该类的唯一对象并返回这个对象
    public static Singleton getInstance(){
        if(uniqueInstance == null){
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
    ...    //其他方法
}

这段代码在多线程时可能会出问题。

解决方法1:利用同步监视器将getInstance()方法变成同步方法。

public static syschronized Singleton getInstance(){
    //...
}

解决方法2:使用急切创建实例而不是延迟实例化的做法。

public class Singleton{
    private static Singleton uniqueInstance = new Singleton();;
    private Singleton(){}//构造器定义为私有

    public static Singleton getInstance(){
        return uniqueInstance;        
    }
}

解决方法3:延迟实现又线程安全的做法:

public class Singleton{
    private volatile static Singleton uniqueInstance;  //使用voltile关键字修饰
    private Singleton(){}//构造器定义为私有

    public static Singleton getInstance(){
        if(uniqueInstance==null){    //检查实例,如果不存在则进入同步块
            synchronized (Singleton.class){    //同步监视器是Singleton的class
                if(uniqueInstance==null){    //进入同步块后再次检查
                    uniqueInstance = new Singleton();    //创建单例对象
                }
            }
        }
        return uniqueInstance; 
    }
}

要点:

  • 单件模式确保程序中一个类只有一个实例,同时也提供访问这个实例的全局点。
  • 在Java中实现单件模式,需要私有的构造器、一个静态方法和一个静态变量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关系数据库语言SQL简介

    SuperHeroes
  • Java虚拟机--对象回收

    SuperHeroes
  • 高并发中幂等的实现

    在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。即不用担心重复执行幂等方法不会影响系统状态。比如setTrue()方法就具有幂等...

    SuperHeroes
  • Singleton模式小探

    设计模式,这个多年前因为《设计模式》这本书而开始名声鹊起的软件名词,相信在当今年代早已为相关人士耳熟能详,你可以像大多数人那样对他顶礼膜拜,你也可以如极少数人...

    用户2615200
  • 这才是现代C++单例模式简单又安全的实现

    说到单例模式,很多人可能都已经很熟悉了,这也是面试常问的一个问题。对于单线程而言,单例的实现非常简单,而要写出一个线程安全的单例模式,曾经有很多种写法。有兴趣的...

    编程珠玑
  • 从零开始学C++之对象的使用(三):static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符

    一、static 与单例模式 单例模式也就是简单的一种设计模式,它需要: 保证一个类只有一个实例,并提供一个全局访问点 禁止拷贝 #include <i...

    s1mba
  • 单例模式

    定义:   单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象...

    用户1134788
  • 设计模式-创建型模式-单例模式

    创建型模式隐藏类的实例和创建细节,通过隐藏对象如何创建组合在一起达到整个系统独立。

    mySoul
  • 设计模式:单例模式

    想想一下这个场景,一个系统中可以存在多个打印任务,但是只有一个正在工作的任务。我们怎样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量可以使得一...

    王强
  • 实战设计模式系列-Singleton(单件)

        单件模式的应用场景大家都不陌生,目的也很明确,就是一个类保证只有一个实际,比如项目中的资源管理器,或打log的类,都比较适合单件模式,话不多说,先贴一段...

    王亚昌

扫码关注云+社区

领取腾讯云代金券