java设计模式之单例模式

原创 2016年08月29日 15:51:47

单例模式是最为简单地一种模式,其定义为:Ensure a class has only one instance, and provide a global point of access to it. 一句话就是说,确保某一个类仅仅只有一个实例化对象,并提供全局访问接口。
一个符合单例模式的类,其类图通常如下:
这里写图片描述

public class Singleton {
    private static final Singleton singleton = new Singleton();
    //私有化构造方法
    private Singleton(){

    }
    //类中其他功能代码,尽量采用static 方式
    public static void doSomething(){

    }
    //返回该类实例化对象
    public static Singleton getInstance(){
        return singleton;
    }
}

其特点在于:

  1. 类的实例对象在类内部完成(最好在初始化时完成)
  2. 私有化类的构造方法,不允许外部构造类的实例
  3. 提供静态方法供外部获取实例对象

    另外,单例模式还有另外一种线程不安全的实现方式如下,之所以说其线程不安全,是考虑到系统压力增大,当有多个线程同时获取该类尚未实例化的对象时,部分线程可能刚执行到判断对象为空,准备新建一个新的对象,而在这之前一丢丢,有部分线程刚执行完这个判断,这个时候他们正准备新建对象。这种情况下,就会出现系统同时会创建多个类的对象。当然,开发者可以通过Sychronized关键字实现同步,避免这个问题。然而这就麻烦了。

public class Singleton {
    private static  Singleton singleton = null;
    public static int i = 0;
    //私有化构造方法
    private Singleton(){

    }
    //类中其他功能代码,尽量采用static 方式
    public static void doSomething(){

    }
    //将类的实例化,放到首次调用获取实例时
    public static Singleton getInstance(){
        if (null == singleton)
            singleton = new Singleton();
        return singleton;
    }
}

单例模式的最佳实现方式还是第一种,在对象初始化获得其实例对象。考虑这种思路,我们也可以实现“二例”、“三例”乃至“N例”模式,即在初始化时,获得一个对象数组或队列,通过改写getInstance()方法,提供对对象池中的对象可控访问接口。
单例模式,说到底,就是使整个系统中该类的实例对象仅有同一个。其优势也显而易见,占用系统资源少,全局共享。一般用于需要频繁创建和销毁某种对象时。
对于上图中的,doSomething()方法,即类中其他业务代码尽量采用static的方式实现,是书作者的观点。个人认为,在不采用静态方法也能实现的情况下,由于静态方法或者说静态变量在整个系统初始化时,将在JVM永久区内存(参见JVM内存分配原理)中获得内存空间,基于这样的考虑,我认为过多的采用static方式,将削弱单例模式在系统资源占用方面的优势作用。更何况,对于公共静态方法,我们本就能采用类名直接访问,而且还不会新建对象实例,在这种情况下,单例模式更像是一种累赘。当然,这些只是基于我个人目前的认知,有其他观点,欢迎提出共同探讨。

版权声明:本文为博主原创文章,未经博主允许不得转载。

java设计模式之单例模式(几种写法及比较)

概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。  ...
  • tolcf
  • tolcf
  • 2015年10月21日 22:56
  • 6148

JAVA设计模式之单例模式

概念:   java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。   单例模式有一下特点:   1、单例类只能有一个实例。   2、单例类必须自己自己创建自...
  • jason0539
  • jason0539
  • 2014年04月16日 06:51
  • 631206

Java四种单例设计模式

Java中的四种单例模式单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。1.饿汉式单例模式public class Singleton{ private static S...
  • twocold_2010
  • twocold_2010
  • 2016年11月20日 15:13
  • 176

Java设计模式透析之 —— 单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据。但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f...
  • sinyu890807
  • sinyu890807
  • 2013年04月29日 11:36
  • 23633

java面试题:java中的单例设计模式及两种实现方法的代码举例

java面试时经常会问到关于单例设计模式,因为它能考察的知识点较多且在开发中经常用到。 那我就来说一说我对于单例设计模式的一些浅见。 首先,在Java中,什么是单例呢? 就是保证类在内存中只有一...
  • qq_24693837
  • qq_24693837
  • 2016年11月23日 20:49
  • 1030

Java设计模式菜鸟系列(六)单例模式建模与实现

单例模式保证了一个类只有一个实例,且提供一个访问全局点的方式,更加灵活的保证了实例的创建和访问约束。系统中只有一个实例,因此构造方法应该为私有 饿汉式:类加载时直接创建静态实例;懒汉式:第一次需要时才...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2014年10月05日 00:44
  • 2448

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个)。这里主要介绍单...
  • zjx409
  • zjx409
  • 2015年08月03日 22:57
  • 4440

Java中用单例模式有什么好处

Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(...
  • huanbia
  • huanbia
  • 2017年05月12日 10:05
  • 1940

设计模式——单例模式的几种实现方式

1.饿汉式:静态常量 这种方法非常的简单,因为单例的实例被声明成static和final变量了,在第一次加载类到内存中时就会初始化,所以会创建实例本身是线程安全的。public class Singl...
  • bingogirl
  • bingogirl
  • 2016年09月01日 00:03
  • 1179

JAVA理解单例模式

单例模式,英文名为:Singleton pattern。首先,我们先去理解字面意思。Singleton:一个,独身。pattern:模式,图案,样品。在字面上,可以理解为“一个样品”。哈哈。再来看看特...
  • xwk568571931
  • xwk568571931
  • 2015年11月10日 23:01
  • 345
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之单例模式
举报原因:
原因补充:

(最多只允许输入30个字)