23种设计模式学习--单例模式【1】

it2026-03-13  2

单例模式

         单例(Singleton)模式定义: 指一个类只有一个对象进行操作,在单线程和多线程的情况下也是可以实现一个对象只存在一个操作的对象。单例模式可以分为 饿汉模式 和 懒汉模式  和  容器单例

饿汉模式:

       对象通过静态方式实例化,在类实例初始化的时候创建可以操作的对象【如果想不通过是类在初始化的时候实例化可以通过内部类来实现*(静态模式)】

public class Singleton { private Singleton(){ } /** * 1 : 非静态模式 */ private static final Singleton singleton = new Singleton(); public Singleton getSingleton(){ return singleton; } /** * 2: 通过静态内部内实现 * 优点: 不会在方法初始化的时候创建对象 只会在使用的时候创建 */ public Singleton getSingleton2(){ return SingletonHolder.singleton; } public static final class SingletonHolder{ private static final Singleton singleton = new Singleton(); } }

懒汉模式

     

public class Singleton { private Singleton(){ } private static Singleton Instance = null; public Singleton getSingleton(){ // 第一个 Instance == null 判断对象是否被创建 if(Instance == null){ synchronized (Singleton.class){ // 第二个 Instance == null 在并发的情况下 判断对象是否被创建 if(Instance == null){ Instance = new Singleton(); } } } return Instance; } }

容器单例

/** * 使用容器实现单例模式 */ public class SingletonManager { private static Map<String, Object> objMap = new HashMap<String, Object>(); private SingletonManager(){ } /** * 对容器进行单例注册 * 将多种单例类型注入到一个统一的管理类,在使用时根据key获取对象对应类型的对象 * @param key * @param instance */ public static void registerService(String key, Object instance){ if(!objMap.containsKey(key)){ objMap.put(key, instance); } } /** * 根据存储在容器中的Key 获取对应的单例对象 * @param key * @return */ public static Object getService(String key){ return objMap.get(key); } }

 

最新回复(0)