当前位置:首页 > 开发 > 编程语言 > Java > 正文

java中单例的五种写法

发表于: 2014-03-28   作者:liuxiaoling   来源:转载   浏览:
摘要: /** * 单例模式的五种写法: * 1、懒汉 * 2、恶汉 * 3、静态内部类 * 4、枚举 * 5、双重校验锁 */ /** * 五、 双重校验锁,在当前的内存模型中无效 */ class LockSingleton { private volatile static LockSingleton singleton; pri
/**
 * 单例模式的五种写法:
 * 1、懒汉
 * 2、恶汉
 * 3、静态内部类
 * 4、枚举
 * 5、双重校验锁
 */
/**
 * 五、 双重校验锁,在当前的内存模型中无效
 */
class LockSingleton
{

    private volatile static LockSingleton singleton;

    private LockSingleton()
    {
    }

    public static LockSingleton getInstance()
    {
        if (singleton == null)
        {
            synchronized (LockSingleton.class)
            {
                if (singleton == null)
                {
                    singleton = new LockSingleton();
                }
            }
        }
        return singleton;
    }

}

/**
 * 四、枚举,《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
 */
enum EnumSingleton
{
    INSTANCE;

    public void doSomeThing()
    {
    }
}

/**
 * 三、静态内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
 */
class InternalSingleton
{

    private static class SingletonHolder
    {
        private final static InternalSingleton INSTANCE = new InternalSingleton();
    }

    private InternalSingleton()
    {
    }

    public static InternalSingleton getInstance()
    {
        return SingletonHolder.INSTANCE;
    }
}

/**
 * 二、恶汉,缺点:没有达到lazy loading的效果
 */
class HungrySingleton
{

    private static HungrySingleton singleton = new HungrySingleton();

    private HungrySingleton()
    {
    }

    public static HungrySingleton getInstance()
    {
        return singleton;
    }
}

/**
 * 一、懒汉,常用的写法
 */
class LazySingleton
{

    private static LazySingleton singleton;

    private LazySingleton()
    {
    }

    public static LazySingleton getInstance()
    {
        if (singleton == null)
        {
            singleton = new LazySingleton();
        }
        return singleton;
    }
}

 

java中单例的五种写法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
java中的单例模式 HK学习笔记 首先定义一个皇帝 Emperor.java public class Emperor { private stat
单例设计模式-------懒汉式,饿汉式 单例设计模式是一种很常见的设计模式 在这里介绍两种单例设计模
基本概念 Singleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对
一.饿汉模式(类加载的时候就会实例化,线程安全) 1 package com.sun.singleton; 2 3 //饿汉模式 4
一.饿汉模式(类加载的时候就会实例化,线程安全) 1 package com.sun.singleton; 2 3 //饿汉模式 4
文章出自:http://blog.csdn.net/zhengzhb/article/details/7331369 定义:确保一个类只有一个实例
public class SingleInstance { private String name; public String getName() { return name; } p
这种设计模式是保证类只有一个类Class只有一个实例存在,如果再次新建这个类,之前的类会立即被摧毁
单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,而 iphone sdk 中全是这种实例,
面试的时候,问到许多年轻的Android开发他所会的设计模式是什么,基本上都会提到单例模式,但是对单
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号