美文网首页
单例模式

单例模式

作者: 尘上的沙粒 | 来源:发表于2018-06-26 22:11 被阅读0次

    一、什么是单例模式

    形象的说,单例就是一个孤单的对象,孤独的存在着。比如生活中的不合群的人。从程序的角度来说,单例是一个只能拥有唯一对象的类,只能通过指定的方法去获取对象。不能通过new,反射获取对象实例。

    二、为什么会有单例-解决了什么问题

    在我们编程过程中,许多系统的资源都是共享的方式设计的,比如打印机可以存在多个任务,但是一次只能有一台打印机在进行打印。
    单例的设计也就解决了某些情况下资源共享的问题,增强了程序的健壮性。

    三、单例模式的特点以及使用场景

    a 特点
    1、只能有一个实例
    2、只能自己创建实例
    3 其他对象只能通过指定的方式获取实例

    b 使用场景
    操作系统中的日历、spring的IOC容器等等

    四、如何实现

    常用实现方式
    a) 饿汉式
    无论是不是使用,都先把对象给new出来,需要的时候直接返回。
    优点:可以解决线程安全的问题
    缺点:浪费资源,并且无法解决反射入侵的问题

    b)懒汉式
    需要的时候才创建,之后需要的时候直接返回。我目前常用的是这种场景。
    优点:解决资源浪费的问题,特别是在有些需要占大量资源的情景。
    缺点:可能有线程安全的问题,需要加synchronized关键字,并且无法解决反射入侵的问题

    c)双重检查加锁

    五 spring中的做法

    Spring中的做法,就是用这种注册式单例

    public class BeanFactory {
    
       private BeanFactory(){}
    
       //线程安全
       private static Map<String,Object> ioc = new ConcurrentHashMap<String,Object>();
    
       public static Object getBean(String className){
    
           if(!ioc.containsKey(className)){
               Object obj = null;
               try {
                   obj = Class.forName(className).newInstance();
                   ioc.put(className,obj);
               } catch (Exception e) {
                   e.printStackTrace();
               }
               return obj;
           }else{
               return ioc.get(className);
           }
       }
    }
    

    相关文章

      网友评论

          本文标题:单例模式

          本文链接:https://www.haomeiwen.com/subject/tihvyftx.html