码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-02-18 21:36:36      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:懒汉模式   man   util   ati   饿汉   void   单例   des   ast   

package com.lkr.dataStructure.designPatterns;

import java.util.HashMap;
import java.util.Map;

/*
单例模式,是java中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
这个类提供了一种访问唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
1。单例类只能有一个实例
2。单例类必须自己创建自己的唯一实例
3。单例类必须给所有其他对象提供这一实例
*/
//饿汉模式
public class SingletonTest {
private static SingletonTest instance = new SingletonTest();
private SingletonTest(){

}
private static SingletonTest getInstance(){
return instance;
}
}

//懒汉模式(线程不安全)
public class Singleton2{
private static Singleton2 instance;
private Singleton2(){
}
public Singleton2 getInstance(){
if(null == instance){
instance = new Singleton2();
}
return instance;
}
}

//懒汉模式(线程安全)
public class Singleton3{
private static Singleton3 instance;
private Singleton3(){

}
public static synchronized Singleton3 getInstance(){
if(null == instance){
instance = new Singleton3();
}
return instance;
}
}

//双重检查模式(dcl)
//推荐用
public class Singleton4{
private static volatile Singleton4 instance;
private Singleton4(){

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

}
}

//静态内部类单例模式
//推荐用
public class Singleton5{
private Singleton5(){

}
public static Singleton5 getInstance(){
return SingletonHolder.INSTANCE;
}
public static class SingletonHolder{
private static final Singleton5 INSTANCE = new Singleton5();
}
}

//枚举单例
//默认枚举实例的创建是线程安全的,并且在任何情况下都是单例
public enum Singleton6{
INSTANCE;
public void doSomething(){

}
}

//使用容器实现单例模式
public class SingletonManager{
private static Map<String,Object> objMap = new HashMap<String, Object>();
private SingletonManager(){

}
public static void registerService(String key,Object instance){
if(!objMap.containsKey(key)){
objMap.put(key,instance);
}
}
public static Object getService(String key){
return objMap.get(key);
}
}
































单例模式

标签:懒汉模式   man   util   ati   饿汉   void   单例   des   ast   

原文地址:https://www.cnblogs.com/turningli/p/10398021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!