`
hougbin
  • 浏览: 502571 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

singleton模式

阅读更多

1 应用场景

Java Singleton 模式(单身模式,单态模式)是一种创建型设计模式。用来保证在运行的应用程序中,一个Class只是实例化一次,也就是只有一个相应的对象存在。

2 创建解析

为了实现 Singleton 模式,我们需要的是一个静态的变量,能够在不创建对象的情况下记忆是否已经产生过实例了。静态变量或静态方法都可以在不产生具体实例的情况下直接调用,这样的变量或方法不会因为类的实例化而有所改变。

3 创建方法

(1)使用静态方法创建单例

定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

  public class Singleton {

  private Singleton(){}

  // 在自己内部定义自己一个实例,是不是很奇怪?

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

  private static Singleton instance = new Singleton();

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

  public static Singleton getInstance() {

  return instance;

  }

  }

(2)
  public class Singleton{

  private static Singleton instance=null;

  public static Singleton getInstance(){

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

  //使用时生成实例,提高了效率!

  if(instance==null)

  instance=new Singleton();

  return instance;

  }

  }

4 为何使用 private构造器

Singleton类的默认构造器被设为私有,这样做可防止其它类使用new关键字直接将对象实例化。对返回Singleton对象的实例方法应用一个静态修饰符,这使得它成为一个类级方法,不创建对象即可进行访问。

5 多线程中应用

多线程应用程序中的构造问题

在多线程应用程序中,你必须仔细构造Singleton模式。当Singleton不存在时,如果两个线程即将同时执行创建方法,这两个线程必须检查Singleton实例,但只有一个线程应当创建新对象。这个问题的典型解决办法就是对类使用相互排斥,指出对象正在被实例化。这是Singleton的一个线程安全的版本:

解决方法:在getInstance()方法声明中添加synchronized关键字:

public static synchronized Singleton getInstance()

分享到:
评论

相关推荐

    C++完美实现Singleton模式

    ### C++中实现Singleton模式的关键知识点 #### 一、Singleton模式简介 Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源...

    C++ 实现的singleton 模式

    **C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...

    Java的Singleton模式代码(免资源分)

    ### Java的Singleton模式详解 #### 一、Singleton模式概述 Singleton模式是一种常用的设计模式,在Java中主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式对于管理共享资源(如数据库连接池、...

    最简单的设计模式学习Singleton模式

    ### 最简单的设计模式学习:Singleton模式 #### 一、Singleton模式简介 Singleton(单例)模式是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场合下非常...

    (创建型模式)Singleton模式

    Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...

    设计模式 创建型模式 Singleton模式(单键)

    Singleton模式: 确保一个类只有唯一的一个实例。 Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton...

    Singleton模式源程序

    Singleton模式是一种设计模式,它是创建型模式的一种,用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式在系统中需要频繁创建和销毁对象,且对象需要共享资源时非常有用,比如配置...

    C#设计模式之Singleton模式

    《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...

    Java线程安全的Singleton模式:深入分析与实现

    在Java编程中,Singleton模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。线程安全的Singleton模式对于多线程环境尤为重要,因为它可以防止多个线程同时创建多个实例。本文将详细介绍...

    Singleton模式

    Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这个模式在许多场景下非常有用,比如配置管理、日志服务、线程池等,需要确保全系统内只有一个对象来处理特定任务的情况...

    深入浅出单例Singleton模式

    【深入浅出单例Singleton模式】 单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局...

    设计模式系列之01-单例模式(Singleton模式)

    设计模式系列之01-单例模式(Singleton模式),很好的资源,理论实践结合讲述,逐步更新

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    C++CLI中实现singleton模式

    双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值。在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类。这种方式很好地消除了一些重复代码臭味,...

    Qt qml Singleton 单例模式

    综上所述,Qt Qml的Singleton模式为全局共享对象提供了方便,使得在Qml环境中管理和访问同一对象变得简单。通过C++和Qml的有效结合,我们可以构建出高效且易于维护的应用程序。了解和熟练运用Singleton模式,对于...

    singleton设计模式java实现及对比

    在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将详细探讨这些实现方法并进行对比。 ### 1. 饿汉式(Static Final Field) 这是最简单的Singleton实现方式,通过静态初始化器在类加载时就...

    java Singleton单例模式

    接下来,我们将深入探讨Java Singleton模式的实现方式、优缺点以及使用场景。 一、Singleton模式的实现 1. 饿汉式(静态常量) ```java public class Singleton { private static final Singleton INSTANCE = ...

    Java设计模式之单态模式(Singleton模式)介绍

    单态模式(Singleton模式)是Java设计模式中的一种,它的主要目标是确保一个类在整个应用程序中只有一个实例存在。这种模式的应用场景广泛,特别是在需要全局共享的资源管理、配置中心、日志服务等场合非常常见。 ...

Global site tag (gtag.js) - Google Analytics