单例模式

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);
}
}
































posted @ 2019-02-18 21:25  图图图图胡图图  阅读(296)  评论(0编辑  收藏  举报