java单例模式就有6种,你知道哪几种?!
2016-03-08 00:13
323 查看
第一种: 双重查锁模式
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Created by Akeem on 2016/3/7.
* double check lock
*/
public class DoubleCheckLock
{
private static DoubleCheckLock instance = null;
private DoubleCheckLock()
{
}
public static DoubleCheckLock getInstance()
{
if (instance == null)
{
synchronized (DoubleCheckLock.class)
{
if (instance == null)
{
instance = new DoubleCheckLock();
}
}
}
return instance;
}
}
第二种:懒汉模式
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 懒汉
*
Created by Akeem on 2016/3/7.
*/
public class Idler
{
private static Idler instance;
private Idler() {
}
public synchronized static Idler getInstance()
{
if (instance == null)
{
instance = new Idler();
}
return instance;
}
}
第三种:枚举单例
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description :
* Created by Akeem on 2016/3/7.
*/
public enum SingleEnum
{
INSTANCE;
public void doSomething()
{
ToastUtils.showLongToast("do
something...");
}
}
第四种 :静态内部类模式
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 静态内部类
*
Created by Akeem on 2016/3/7.
*/
public class StaticInner
{
private static StaticInner instance;
public static StaticInner getInstance()
{
return SingletonHolder.STATIC_INNER;
}
private static class SingletonHolder
{
private static final StaticInner STATIC_INNER = new StaticInner();
}
}
第五种 第六种 : 恶汉单例,单例管理类
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 单例管理类
,系统就是这么干的
*
Created by Akeem on 2016/3/7.
*/
public class SingletonManager
{
private static Map<String, Object> objMap = new HashMap<>();
private SingletonManager()
{
}
public static void registerInstance(String
key, Object o) {
if (!objMap.containsKey(key))
{
objMap.put(key, o);
}
}
public static Object getService(String
key) {
return objMap.get(key);
}
}
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Created by Akeem on 2016/3/7.
* double check lock
*/
public class DoubleCheckLock
{
private static DoubleCheckLock instance = null;
private DoubleCheckLock()
{
}
public static DoubleCheckLock getInstance()
{
if (instance == null)
{
synchronized (DoubleCheckLock.class)
{
if (instance == null)
{
instance = new DoubleCheckLock();
}
}
}
return instance;
}
}
第二种:懒汉模式
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 懒汉
*
Created by Akeem on 2016/3/7.
*/
public class Idler
{
private static Idler instance;
private Idler() {
}
public synchronized static Idler getInstance()
{
if (instance == null)
{
instance = new Idler();
}
return instance;
}
}
第三种:枚举单例
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description :
* Created by Akeem on 2016/3/7.
*/
public enum SingleEnum
{
INSTANCE;
public void doSomething()
{
ToastUtils.showLongToast("do
something...");
}
}
第四种 :静态内部类模式
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 静态内部类
*
Created by Akeem on 2016/3/7.
*/
public class StaticInner
{
private static StaticInner instance;
public static StaticInner getInstance()
{
return SingletonHolder.STATIC_INNER;
}
private static class SingletonHolder
{
private static final StaticInner STATIC_INNER = new StaticInner();
}
}
第五种 第六种 : 恶汉单例,单例管理类
/**
* Author : Akeem
* Email : zuiaisha1@126.com
* Description : 单例管理类
,系统就是这么干的
*
Created by Akeem on 2016/3/7.
*/
public class SingletonManager
{
private static Map<String, Object> objMap = new HashMap<>();
private SingletonManager()
{
}
public static void registerInstance(String
key, Object o) {
if (!objMap.containsKey(key))
{
objMap.put(key, o);
}
}
public static Object getService(String
key) {
return objMap.get(key);
}
}
相关文章推荐
- 如何给maven项目增加新的jar包(从服务器上下载)---通过eclipse工具
- Java基础知识
- Leetcode:66. Plus One(JAVA)
- 一个经典例子让你彻彻底底理解java回调机制
- java 通过反射获取调用类方法及属性
- Spring学习笔记十一---通过注解配置bean
- Spring学习笔记十一---Bean之间的关系@Autowired
- Spring学习笔记十二---泛型依赖注入
- java线程同步的五种方法
- java正则表达式语法详解及其使用代码实例
- 深入理解Java 虚拟机(周志明)笔记(四)——Java对象创建过程
- 深入理解Java 虚拟机(周志明)笔记(三)——Java对象在内存中的存储与访问
- 深入分析 Java 中的中文编码问题
- Java设计模式
- Java线程池的设计与分析
- Java基础----反射Reflect---Field
- java thread join
- ajax进入springmvc后台返回中文乱码
- 5.5 Spring事务支持
- JAVA多线程实现的三种方式