`

单例模式Singleton某个类只需要一个类实例

阅读更多
保证一个类只有一个实例,并提供一个访问它的全局访问点。

懒汉式和饿汉式
懒汉式
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }
 
  public static synchronized Singleton getInstance() {
    if(instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
饿汉式
public class Singleton {
  private static Singleton instance = new Singleton();

  private Singleton() {
  }
 
  public static Singleton getInstance() {
    return instance;
  }
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。

这里的单例模式并不适用于集群环境。

懒汉模式体现了延迟加载和缓存的思想。

懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。

不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
  synchronized(Singleton.class) {
    if(instance == null) {
      instance = new Singleton();
    }
  }
}

饿汉式是线程安全的。

更好的单例实现方式
public class Singleton {
  private static class SingletonHolder {
    private static Singleton instance = new Singleton();
  }
 
  private Singleton() {
  }

  public static Singleton getInstance() {
    return SingletonHolder.instance;
  }
}

单例模式的本质是控制实例数目。
分享到:
评论

相关推荐

    c#单例模式(Singleton)的6种实现

    1.1.1 摘要 ...单例模式(Singleton)是几个创建模式中最对立的一个,它的主要特点不是根据用户程序调用生成一个新的实例,而是控制某个类型的实例唯一性,通过上图我们知道它包含的角色只有一个,

    单例模式代码.rar

    Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在...

    单例模式(Singleton Pattern)

    当我们频繁的创建和销毁对象,会消耗大量资源,当我们使用对象通过new,将产生大量的对象实例,而单例模式只会存在一个相同对象,而不需要我们再次new,节省了大量的资源. 1.饿汉式(静态常量) public class Singleton1 { ...

    Python单例模式的四种创建方式实例解析

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置...

    JS 设计模式之:单例模式定义与实现方法浅析

    单例模式(Singleton)属于创建型的设计模式,它限制我们只能创建单一对象或者某个类的单一实例。 通常情况下,使用该模式是为了控制整个应用程序的状态。在日常的开发中,我们遇到的单例模式可能有:Vuex 中的 ...

    android开发设计模式之——单例模式详解

     单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点 二、适用场景 1. 应用中某个实例对象需要频繁的被访问。 2. 应用中每次启动只会存在一个实例。如账号系统,数据库系统。 三、常用...

    python单例模式的多种实现方法

    单例模式(Singleton Pattern),是一种软件设计模式,是类只能实例化一个对象, 目的是便于外界的访问,节约系统资源,如果希望系统中 只有一个对象可以访问,就用单例模式, 显然单例模式的要点有三个;一是某个类...

    Singleton 单件(创建型模式)教程

    单例模式是一种常用的软件...通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案

    JavaScript编程的单例设计模讲解

    如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 基本结构 最简单的单例模式起始就是一个对象字面量,它将有关联的属性和方法组织到一起。 var singleton = { prop:value, metho

    各种设计模式及解析

    1、命令模式 Command (人,开关,电灯) 2、策略模式 Strategy (用户选择各种排序方法进行排序) ...6、单例 Singleton (保证应用程序中,某个类只有一个实例存在) 7、代理模式、观察者模式、工厂模式、装饰模式等

    5种Python单例模式的实现方式

    如果想使得某个类从始至终最多只有一个实例,使用__new__方法会很简单。Python中类是通过__new__来创建实例的: class Singleton(object): def __new__(cls,*args,**kwargs): if not hasattr(cls,'_inst'): cls...

    PHP中单例模式的使用场景与使用方法讲解

    单例模式按字面来看就是指某一个类只存在一个实例,这一点其实是与静态方法是相同的,只存在一个实例的好处是当我们需要使用某个类时只需要实例化一次,不需要每次都去new,极大的降低了资源的耗费,比如说数据库的...

    33种JAVA设计模式DEMO

    单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器...

    GoF 的 23 种设计模式

    单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新...

    单利模式及python实现方式详解

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保 某一个类只有一个实例存在 。当希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置...

    设计模式速记

    单例模式(Singleton Pattern)类只有一个实例 原型模式(Prototype Pattern)实现ICloneable接口 结构型模式 适配器模式(Adapter Pattern)不想实现每个接口 桥接模式(Bridge Pattern)给桥设置某个实例,用桥调用...

    二十三种设计模式【PDF版】

    保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些...

    Python中单例模式总结

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

    gof:GoF的23种设计模式

    GoF 设计模式GoF所提出的23种...单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。原型(Prototype)模式:将一个对象作为原型,通过对其进行复制

    design-pattern-test:设计模式学习

    工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式---这些设计模式关注类和...

Global site tag (gtag.js) - Google Analytics