`
mamaoyuan625
  • 浏览: 176912 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java单例模式的一个小结

阅读更多

单例模式单例模式是一种常见的设计模式,
单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

一、懒汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
单例模式-懒汉式单例
public class LazySingleton {    
   /*** 私有静态对象,加载时候不做初始化      */    
   private static LazySingleton m_intance=null;     
    /*** 私有构造方法,避免外部创建实例      */    
    private LazySingleton(){}    
    /*** 静态工厂方法,返回此类的唯一实例.* 当发现实例没有初始化的时候,才初始化. * @return LazySingleton */    
    synchronized public static LazySingleton getInstance(){
        if(m_intance==null){
           m_intance=new LazySingleton();
         }
         return m_intance;
    }
}

//测试一下单例模式
  LazySingleton lazySingleton = LazySingleton.getInstance();  
  LazySingleton lazySingleton1 = LazySingleton.getInstance();
  
  if(lazySingleton==lazySingleton1)){
   System.out.println("同一个对象实例");
  }else{
   System.out.println("不是同一个对象实例");
  }

二、饿汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
/***单例模式-饿汉式单例*/
public class EagerSingleton {    
    /**私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象*/
    private static final EagerSingleton m_instance = new EagerSingleton();
    /*** 私有构造方法,避免外部创建实例      */    
    private EagerSingleton() {}     //提供了一个空的构造方法
    /*** 静态工厂方法,返回此类的唯一实例.* @return EagerSingleton      */    
    public static EagerSingleton getInstance() {
       return m_instance;    
    }
}

//下面来判断一下有没有达到单例效果(系统运行的时候只出来一个空例) 
EagerSingleton eagerSingleton = EagerSingleton.getInstance();  
EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();
  
  if(eagerSingleton==eagerSingleton1)){
   System.out.println("同一个对象实例");
  }else{
   System.out.println("不是同一个对象实例");
  }

三、登记式单例这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
/*** 单例模式- 登记式单例*/
public class RegSingleton {    
    /*** 登记薄,用来存放所有登记的实例      */    
    private static Map<String, RegSingleton> m_registry = new HashMap();    
    //在类加载的时候添加一个实例到登记薄    
        static {
           RegSingleton x = new RegSingleton();
           m_registry.put(x.getClass().getName(), x);
        }    
        /*** 受保护的默认构造方法*/    
        protected RegSingleton() {}    
        /*** 静态工厂方法,返回指定登记对象的唯一实例;
             * 对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
             * @param name
             * @return
                RegSingleton      */    
public static RegSingleton getInstance(String name) {        
      if (name == null) {            
            name = "RegSingleton";         
       }        
       if (m_registry.get(name) == null) {
            try {
                 m_registry.put(name, (RegSingleton) Class.forName(name).newInstance());
            } catch (InstantiationException e) {                
                  e.printStackTrace();            
            } catch (IllegalAccessException e) {                
                   e.printStackTrace();            
           } catch (ClassNotFoundException e) {                
                   e.printStackTrace();           
            }        
        }        
        return m_registry.get(name);    
}    


/** * 一个示意性的商业方法      * @return String      */    
public String about() {        
      return "Hello,I am RegSingleton!";    
}}

四、单例模式的一个应用该应用是配置文件管理类。为了本例能正确运行,我在C盘下先建立了一个xxxx.properties文件,内容如下:-------------------

user=rootpassword=leizhimin这个配置文件管理类的代码如下:
单例模式应用-单例类应用-配置文件管理*/
public class ConfigManager {    
/*** 属性文件全名*/    
private static final String PFILE = "C:\\xxx.properties";   

转自:http://www.web36.cn/java/basic/2009/0610/98.html

分享到:
评论
2 楼 vinkeychen 2010-11-09  
uqortbsa 写道
你正好相反过来,懒汉和饿汉

博主也没完全弄反吧?基本上是那样,就懒汉式的第一段话说成饿汉式的啦吧。
1 楼 uqortbsa 2010-09-25  
你正好相反过来,懒汉和饿汉

相关推荐

    2.单例模式(Singleton)1

    单例模式是一种设计模式,它的核心思想是在整个应用程序中,保证一个类只有一个实例存在,并提供一个全局访问点。这样做的好处在于控制共享资源,优化性能,避免并发问题,以及简化对象间的交互。 **定义** 单例...

    java 使用单例模式计算某一年(默认今年)一共有多少个周,以及列出每一周和其所对应的时间段(内含注释)

    单例模式是一种常用的软件设计模式,在整个应用中确保某个类只有一个实例存在,并提供一个全局访问点。这种模式常用于创建那些希望在整个系统中只存在一个实例的对象,例如日志管理器、配置管理器等。本示例中的`...

    单例模式讲解

    单例模式确保一个类仅有一个实例存在,并提供一个全局访问点来获取该实例。这种模式通常用于资源管理、线程池、日志对象、数据库连接等场景。 单例模式的特点总结如下: 1. **单例类只能有一个实例**:这是单例...

    java设计模式

    7.2 单例模式的定义 7.3 单例模式的应用 7.4 单例模式的扩展 7.5 最佳实践 第8章 工厂方法模式 8.1 女娲造人的故事 8.2 工厂方法模式的定义 8.3 工厂方法模式的应用 8.3.1 工厂方法模式的优点 8.3.2 工厂方法模式的...

    5. 创建型设计模式小结1

    1. 单例模式:单例模式确保一个类只有一个实例,并提供一个全局访问点。它在多线程环境中尤为重要,因为需要保证线程安全的单个实例创建。在Java等语言中,通常使用双检锁(Double-Check Locking)或者静态内部类的...

    java基础知识从业必备知识点结构图小结.rar

    这个"java基础知识从业必备知识点结构图小结.rar"压缩包文件,通过图像化的方式,帮助初学者和从业者快速概览Java的主要知识点,并提供了进一步学习的方向。无论是初入Java殿堂的新手,还是需要巩固基础的开发者,都...

    java初学者应该阅读的书籍

    对于Java初学者来说,选择合适的书籍进行学习是至关重要的一步。好的书籍不仅能够帮助我们打下坚实的基础,还...因此,对于初学者而言,耐心地研读这些书籍,并结合实际项目进行练习,将会是一个非常有价值的学习过程。

    java大球吃小球游戏.zip

    【标题】:“Java大球吃小球游戏”是一款基于Java编程语言开发的结课大作业,它呈现了一个有趣的游戏场景,玩家控制的大球通过吞噬场景中的小球来增长体积。这个游戏不仅展示了Java GUI(图形用户界面)的应用,还...

    Android中单例模式的一些坑小结

    在Android开发中,单例模式是一种常见的设计模式,用于确保某个类只有一个实例并提供全局访问点。然而,实现单例模式时,开发者可能会遇到一些潜在的陷阱和问题。本篇文章将详细探讨Android中单例模式的坑以及如何...

    设计模式相关的网站

    它涵盖了各种经典的设计模式,如单例模式、工厂模式、观察者模式等,并提供了详尽的解释和示例代码。此外,该网站还包含了对设计模式背后原理的深入分析,帮助开发者更好地理解这些模式的应用场景及其背后的逻辑。 ...

    Java图书管理小系统

    《Java图书管理小系统》是针对初学者设计的一个结课项目,旨在帮助学习者掌握Java编程基础以及简单的文件操作。这个系统并未与数据库进行交互,而是选择了直接对文件进行读写,简化了系统的复杂性,使得初学者可以...

    Java的23种设计模式(详细解说及实例讲解)

    ### 小结 以上就是Gang of Four所提出的23种设计模式及其简要介绍。每种模式都解决了特定类型的问题,并提供了一种标准化的解决方案。通过学习和应用这些模式,开发人员可以提高代码质量,增强系统的可扩展性和可...

    JBPM4使用小结.doc

    ProcessEngine 是单例模式,即整个系统只会有一个 ProcessEngine 实例。 RepositoryService RepositoryService 是流程发布服务,是 ProcessEngine 的下一个环节。可以通过 ProcessEngine 获取 RepositoryService ...

    Java 飞机大战小游戏实验 大二下学期 双人组结课实验最终版.zip

    《Java飞机大战小游戏实验》是大二下学期的一次双人组结课实验的最终版本,这个项目旨在帮助学生深入理解和应用Java编程语言,尤其是在游戏开发领域的实践技能。通过分析和学习这个游戏的源码,学生可以提升自己的...

    Android问题小结

    本资料包"Android问题小结"是针对Android开发者的一个宝贵资源集合,涵盖了多个方面的知识,包括事件分发机制、设计模式、图层管理、属性动画、框架使用、应用安全以及个人职业发展规划等。 首先,"技术交流--...

    Java 图书管理系统实训报告

    此外,我们还运用了设计模式,如工厂模式来创建数据库连接,单例模式来确保数据库连接的唯一性。 在编码过程中,我们使用了JDBC(Java Database Connectivity)进行数据库操作,通过PreparedStatement预编译SQL语句...

    Tomcat 系统架构与设计模式,第 1 部分: 工作原理1

    Tomcat 是一个基于 Java 的开源 Web 服务器和 Servlet 容器,采用 Java 语言编写,遵循 Servlet 和 JSP 规范。Tomcat 的架构主要由以下几个部分组成: * Connector:负责处理客户端的请求和响应 * Engine:负责管理...

    J2EE核心模式004.pdf

    2. **Singleton(单例)模式**:确保一个类只有一个实例,并提供一个全局访问点。这对于创建全局唯一对象非常有用,比如数据库连接池。 3. **Factory(工厂)模式**:提供了一个创建对象的接口,但允许子类决定...

Global site tag (gtag.js) - Google Analytics