`

常用设计模式

阅读更多

设计模式——单例模式

定义:确保一个类只有一个实例,并提供一个全局的访问点

应用场景:线程池,缓存,对话框,处理偏好设置,注册表等等

两种构建方式:

  1. 懒汉式(指全局的单例实例在第一次被使用时

  2. 饿汉式(指全局的单例实例在类装载时构建

//懒汉式
public class Singleton{
    private static Singleton uniqueInstance = null;
    //其他实例变量
    private Singleton(){}
    public static Singleton getInstance(){
      if(uniqueInstance == null){
         uniqueInstance = new Singleton();
      }
        return uniqueInstance ;
  }
    //其他有用的方法
}

注意:上面的单例类,在多线程情况下会出错!

1.如果对性能要求不是苛刻,直接在getInstance方法上加上synchronized修饰。

问题:我们只需要在第一次实例化单例对象时才需要真正进入同步方法,一旦设置好了uniqueInstance变量就不需要进入同步方法中。以后每次调用这个方法会是一种累赘。

2.使用“饿汉式”创建实例,不用懒汉式

//饿汉式
public class Singleton{
    private static Singleton uniqueInstance = new Singleton();
    //其他实例变量
    private Singleton(){}
    public static Singleton getInstance(){
        return uniqueInstance ;
  }
    //其他有用的方法
}
 

3.用“双重检查加锁”,在getInstance方法中减少使用同步

 

注:volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。

注意:每个类加载器都会定义一个命令空间,如果程序有多个类加载器,并且使用了单例模式,需要小心:自行指定类加载器,并指定为同一个类加载器。

分享到:
评论

相关推荐

    JAVA常用设计模式

    JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式

    常用设计模式及Java程序 pdf

    ### 常用设计模式及Java程序设计 #### 设计模式概述 设计模式是一种软件设计领域中的通用解决方案,用于描述解决常见设计问题的最佳实践。它不仅有助于提高代码的复用性和可读性,还能增强软件架构的灵活性和扩展...

    23常用设计模式的UML

    这个压缩包文件"23常用设计模式的UML"提供了23个经典设计模式的统一建模语言(UML)表示,这对于理解和应用这些模式至关重要。 首先,我们要了解UML是一种标准化的图形表示法,用于系统分析、设计和建模。它通过...

    Java常用设计模式

    以下是关于标题和描述中提到的Java常用设计模式的详细解释: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过私有构造器和静态工厂方法实现。双检锁(Double-Check Locking)...

    九种常用设计模式的应用!

    这篇博客“九种常用设计模式的应用!”探讨了九种常见的设计模式,并结合实际开发场景阐述了它们的应用。以下是对这些设计模式的详细介绍: 1. **单例模式**(Singleton):保证一个类只有一个实例,并提供一个全局...

    Jjava常用设计模式

    在这个Java常用设计模式的文档中,我们将深入探讨以下几种模式:单例模式、工厂模式、策略模式以及观察者模式。 **单例模式**是一种限制类实例化次数的模式,确保一个类只有一个实例,并提供一个全局访问点。在Java...

Global site tag (gtag.js) - Google Analytics