1.定义
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2. 单例模式的本质:控制实例数目
Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。
package com.fairy.dp.singleton; public class Singleton { /** * 类级的内部类,也就是静态的成员式内部类, * 该内部类的实例与外部类的实例没有绑定关系, * 而且只有被调用到才会装载,从而实现了延迟加载 */ private static class SingletonHolder { /** * 静态初始化器,由JVM来保证线程安全 */ private static Singleton instance = new Singleton(); } /** * 私有化构造方法 */ private Singleton() { } public static Singleton getInstance() { return SingletonHolder.instance; } }
3 从Java 1.5发行版起,实现Singleton只需要编写一个包含单个元素的枚举类型:
package org.fool.ej; /** * Enforce the singleton property with a private constructor or an enum type */ public enum Singleton { INSTANCE; public static void main(String[] args) { Singleton s1 = Singleton.INSTANCE; Singleton s2 = Singleton.INSTANCE; System.out.println(s1 == s2); } }
这种方法在功能上与公有域方法相近,但是它更加简洁,无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛采用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
4. 懒汉式实现,时间换空间,不加同步的懒汉式是线程不安全的。
/** * 懒汉式单例实现 */ public class Singleton { private static Singleton s = null; private Singleton() { } public static synchronized Singleton getInstance() { if(s == null) { s = new Singleton(); } return s; } }
5. 饿汉式实现,空间换时间,饿汉式是线程安全的
/** * 饿汉式单例实现 */ public class Singleton { private static Singleton s = new Singleton(); private Singleton() { } public static Singleton getInstance() { return s; } }
相关推荐
简单的单例模式举例Singleton 分为恶汉式 懒汉式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...
单例模式的特点有三: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,...
该文当中对Java单类模式有非常细致入微的,循序渐进的讲解。
单例模式 Singleton 单例模式线程安全问题和拓展
设计模式C++学习之单例模式(Singleton)
主要介绍了单例模式 Singleton 简单实例设计模式解析的相关资料,需要的朋友可以参考下
java Singleton单例模式 java Singleton单例模式
一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。
此示例展示了Qml 的单例模式(类似全局对象,只生成一次实例,可全局使用) surfsky.cnblogs.com
单例模式 Singleton Pattern 问题解决: (1)单例模式简介: Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有...
Java面向对象(高级)-- 单例(Singleton)设计模式
单例模式(Singleton)的6种实现,单例模式(Singleton)的6种实现
设计模式总结-模板设计模式,单例模式(singleTon)
在Java应用中,单例对象能保证在一个...3、有些像交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了,只有使用单例模式,才能保证核心交易服务器独立控制整个流程。 CSDN代码的详细解释。
4、单例模式(Singleton Pattern) 用意:仅允许生成一个对象时
深入浅出Singleton,详细掌握单例模式
单例设计模式Singleton1