`
bugyun
  • 浏览: 551568 次
社区版块
存档分类
最新评论

深入单例模式一(转)

 
阅读更多

参考:http://blog.csdn.net/mrfly/article/details/13372441

 

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

 

 

 

 

饿汉式代码如下:

 

[java] view plain copy
 
  1. package zhaodp.demo;  
  2.   
  3. public class Singleton {  
  4.     private static Singleton uniqueInstance = null;  
  5.     public static Singleton instance(){  
  6.         if(uniqueInstance == null)  
  7.             uniqueInstance = new Singleton();  
  8.         return uniqueInstance;  
  9.     }  
  10. }  

 

设计模式的教科书上的示例一般与上述代码类似。如果在多线程环境下,instance()方法可能会出现问题,如何才能做到线程安全呢,可以将代码变成:

[java] view plain copy
 
  1. public synchronized static Singleton instance(){  
  2.     if(uniqueInstance == null)  
  3.         uniqueInstance = new Singleton();  
  4.     return uniqueInstance;  
  5. }  

将instance方法加上synchronized进行限定,确实可以解决线程安全问题,但会造成多线程调用该方法时串行执行,效率低下,如何改进呢?以下代码既可以保证线程安全又可以提高多线程并发的效率。

[java] view plain copy
 
  1. package zhaodp.demo;  
  2.   
  3. public class Singleton {  
  4.     private static Singleton uniqueInstance = null;  
  5.   
  6.     public static Singleton instance() {  
  7.         if (uniqueInstance != null)  
  8.             return uniqueInstance;  
  9.         synchronized (Singleton.class) {  
  10.             if (uniqueInstance == null)  
  11.                 uniqueInstance = new Singleton();  
  12.         }  
  13.         return uniqueInstance;  
  14.     }  
  15. }  


 

或者这么写:

[java] view plain copy
 
  1. package zhaodp.demo;  
  2.   
  3. public class Singleton {  
  4.     private static Singleton uniqueInstance = null;  
  5.   
  6.     public static Singleton instance() {  
  7.         if (uniqueInstance == null) {  
  8.             synchronized (Singleton.class) {  
  9.                 if (uniqueInstance == null)  
  10.                     uniqueInstance = new Singleton();  
  11.             }  
  12.         }  
  13.         return uniqueInstance;  
  14.     }  
  15. }  
分享到:
评论

相关推荐

    设计模式单例模式和工厂模式综合应用

    **单例模式**是一种限制类实例化次数的模式,确保一个类只有一个实例,并提供全局访问点。在Java中,通常通过私有构造函数和静态工厂方法来实现单例。单例模式常用于控制共享资源,如线程池、数据库连接或者配置对象...

    设计模式入门之一:深入单例模式

    单例模式是设计模式中最基础且常用的一种,它旨在确保一个类只有一个实例,并提供一个全局访问点。在软件开发中,有些对象只需要一个实例就能满足需求,比如线程池、数据库连接、配置管理等。使用单例模式可以避免...

    设计模式之单例模式(结合工厂模式)

    单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    c++单例模式线程日志类

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在这个特定的场景中,我们讨论的是一个实现了单例模式的日志类,该类专为多线程环境设计,具备日志等级控制、...

    Java单例模式深入理解

    Java单例模式是一种设计模式,它允许...以上就是关于Java单例模式的深入理解和常见实现方式,希望对你理解单例模式有所帮助。在实际开发中,灵活运用并结合具体场景选择合适的单例模式将有助于提高代码质量和可维护性。

    Java 单例模式 工具类

    本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...

    设计模式 中的 单例模式和观察者模式

    首先,让我们深入了解单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。这种模式在资源管理、缓存、对话框、注册表设置、日志记录等场景中非常有用。为了实现单例,通常我们会创建一个...

    C#创建窗体的单例模式

    在IT行业中,编程模式是一种解决常见问题的最佳实践方式,单例模式是其中之一,它确保一个类只有一个实例,并提供一个全局访问点。在C#中,特别是在开发Windows Forms(WinForm)应用程序时,单例模式可以帮助我们更...

    深入浅出单例Singleton模式

    单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局配置、数据库连接池、日志服务等。...

    设计模式C++学习之单例模式(Singleton)

    在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于控制类的实例化过程,防止多处代码创建多个实例导致资源的浪费或者状态不一致的问题。在...

    设计模式——策略模式 & 单例模式

    单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这样做的好处在于,当系统只需要一个共享资源时,可以避免多次实例化导致的资源浪费,同时方便对这个唯一实例进行控制和管理。 ...

    Java 单例模式.pptx

    单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序生命周期中只存在一个实例,这有助于节省资源并简化对...

    单例模式和工厂模式代码

    **单例模式** 是一种限制类实例化次数的模式,确保一个类在整个程序运行过程中只有一个实例存在。这种模式通常用于管理共享资源或者需要全局访问的对象,例如数据库连接、线程池或缓存。在Java中,实现单例模式有...

    php单例模式实例

    下面我们将深入探讨PHP中的单例模式及其实现方式。 首先,理解单例模式的基本概念。单例模式的核心思想是限制类的实例化过程,确保在程序运行期间,类的实例只有一个。通过控制类的构造函数,使其不能被外部直接...

    大话设计模式--Singleton(单例模式)

    本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式主要用于控制类的实例化过程,防止因为多个实例导致的资源...

    三种工厂设计模式和两种单例模式

    在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...

    工厂模式与单例模式

    其次,单例模式也是一种创建型设计模式,它的特点是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置中心、日志记录、线程池等场景,以节省资源并保证全局一致性。单例模式的实现通常有懒汉式、...

Global site tag (gtag.js) - Google Analytics