`
happyjeef18
  • 浏览: 14994 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式(一)--单例模式

阅读更多
单例模式就是指整个应用中只能存在一个实例。单例类的创建有三种方式。就这三种方式可以作一个比较:

    第一种:在声明变量处实例化对象(也叫 饿汉式 单例模式)代码如下:

    

package com.zds.pattern.singleton;

/** *//**

* @author sam E-mail:ashan8888@163.com

* @version 1.0

*/

public class SingletonA {

  

    private static SingletonA singletonA = new SingletonA();

   

    private SingletonA(){

        System.out.println("饿汉式");

    }

   

    public static SingletonA getInstance(){

        return singletonA;

    }   

}



   

   第二种:把对象的创建放到方法里边去(也较 懒汉式 单例模式)代码如下:

package com.zds.pattern.singleton;



/** *//**

* @author sam E-mail:ashan8888@163.com

* @version 1.0

*/

public class SingletonB {

    private static SingletonB singletonB;



    private SingletonB(){

        System.out.println("懒汉式");

    }

   

    synchronized public static SingletonB getInstance() {



        if (singletonB == null) {

            singletonB = new SingletonB();

        }

        return singletonB;

    }

}



第三种:另类懒汉式方式:代码如下:

package com.zds.pattern.singleton;

/** *//**

* @author sam E-mail:ashan8888@163.com

* @version 1.0

*/

public class SingletonC {

     static   class  SingletonHolder   {  

         static  SingletonC instance  =   new  SingletonC();

      }   

     

     private SingletonC(){

         System.out.println("另类懒汉式");

     }

       public   static  SingletonC getInstance()   {  

         return  SingletonHolder.instance;  

      } 

}



他们之间有什么有缺点呢?? 先来看第一种方式:懒汉式

    优点:在初始化的时候创建对象,调用getInstance的时候,没有同步方法,性能较高。

    缺点:可能导致数据还未初始完就创建了对象,故有可能对象数据初始不正确。

    上边第一段代码例子太简单了,看不成任何问题,那么来写一个可能产生问题的例子看看:代码如下:



package com.zds.pattern.singleton;



/** *//**

* @author sam E-mail:ashan8888@163.com

* @version 1.0

*/

public class SingletonAa {

    private static SingletonAa singletonAa = new SingletonAa();



    public static String name = "sam";



    public static String password;

    static {

        password = "tiger";

    }

   

    private SingletonAa(){

        if(name.equals("sam")) System.out.println("name is ok");

        if(password.equals("tiger")) System.out.println(" password is ok");

    }



    public static SingletonAa getInstance() {

        return singletonAa;

    }

}





  写到这个地方,是不是能看出点眉目了,呵呵,上边代码是不是会抛出:java.lang.NullPointerException异常,为什么呢,很简单,我们知道

类的加载过程是什么: 装载----验证 ---准备---解析---初始化。初始化之前,类加载器会把所有变量都默认为对应类型的默认值。复合类型变量是不是为null,而在初始的时候,上边的第一条语句就new了本身,在进入构造器函数的时候,是不是就产生了错误。

  第二种创建方式的优缺点:

   优点:避免了第一种方式可能产生的错误。

   缺点:不利于用在多线程上,因为他使用了锁,这样在资源上有很大浪费。

   后来有人提出了双检查单例模式,参考资料在:http://www.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java 

第三种创建方式的优缺点:(Bob lee创建的)

   优点: 综合了上诉两种方法的优点,故,我比较推荐使用这种方式;
分享到:
评论

相关推荐

    java设计模式----单例模式

    在Java编程语言中,设计模式是一种经过验证的解决常见软件设计问题的最佳实践。单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、...

    C++设计模式-单例模式

    李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。

    设计模式-单例模式脑图

    设计模式-单例模式脑图

    JAVA-设计模式-创建型模式-单例模式

    JAVA-设计模式-创建型模式-单例模式

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

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

    单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...

    设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)

    单例模式是软件设计模式中的一种基础且广泛应用的模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在资源管理、配置对象、缓存等场景下非常常见,因为它可以避免因频繁创建和销毁对象而...

    Java设计模式-单例模式详解

    单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 实现单例模式的步骤: 1. 只有 ...

    设计模式-单例模式

    单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池或者配置管理等。 在Java中...

    设计模式-单例设计模式

    单例模式是一种常见的创建型设计模式,其核心思想在于确保一个类仅有一个实例存在,并且该实例由该类自行创建,随后向整个系统提供这一唯一实例。 #### 类图解析 在设计模式中,类图是一种直观展示类结构及关系的...

    单例模式---初学 优点--缺点

    单例模式是软件设计模式中的一种经典模式,主要用于限制类的实例化,确保在整个应用程序中,该类只有一个实例存在。这种模式在很多场景下都非常有用,例如管理共享资源、全局配置或者提供一个全局访问点等。 单例...

    android-设计模式-单例模式(干货)

    android 单例模式 干货 告诉你哪种单例模式最实用 最好用 不再迷茫

    一例读懂设计模式-单例模式、简单工厂模式.zip

    本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...

    ava常用设计模式-单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一实例。 单例模式有多种实现...

    常见设计模式-单例模式

    单例模式是一种常见的设计模式,它的主要作用是确保在内存中仅创建一次对象,并提供一个全局访问点。单例模式有两种类型:饿汉类型和懒汉类型。 饿汉类型的单例模式是在类加载时创建对象,例如: ```java class ...

    优秀的设计模式示例-单例模式

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。以下是对单例模式的详细...

    设计模式ForiOS-02-单例模式实用.pdf

    设计模式ForiOS-02-单例模式实用.pdf

    设计模式 For iOS-02-单例模式

    单例模式是一种常用的软件设计模式,特别是在iOS开发中,它确保一个类仅有一个实例,并提供一个全局访问点。iOS SDK中广泛应用了单例模式,比如UIApplication和NSFileManager等类就是以单例形式存在。 在iOS开发中...

    设计模式实验报告-单例模式 .docx

    设计模式实验报告

    PHP5设计模式-单例模式

    单例模式是一种常用的设计模式,它在软件工程中扮演着控制类实例化过程的角色,确保一个类只有一个实例,并提供全局访问点。这种模式在PHP中尤其常见,特别是在需要频繁实例化然后销毁的对象,或者需要控制共享资源...

Global site tag (gtag.js) - Google Analytics