美文网首页
单例设计模式理解

单例设计模式理解

作者: 盐海里的鱼 | 来源:发表于2020-05-25 23:51 被阅读0次

单例:即只返回同一个构建对象的一种设计模式

1.最常见的单例:这是一种线程不安全的单例
//单例模式 线程不安全 可能产生不同的单例实例 
class Signle1{
    private static Signle1 mInstance;
    private Signle1(){}

    public static Signle1 getInstance(){
        if(mInstance==null){
            try {
                Thread.sleep(getRandom());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mInstance = new Signle1();
        }
        return mInstance;
    }

    public static long getRandom(){
        Random random = new Random();
        int max = 1000;
        int min =100;
        return random.nextInt(max)%(max-min+1)+min;
    }
}
78685c81fab57c4a2b89b0e1ce21321.png
2.饿汉式单例:
//饿汉式 单例模式 线程安全  适用场景 开销小 运行就需要创建时使用
class Single2{
    public static Single2 sInstance =new Single2();
    private Single2(){}

    public static Single2 getInstance(){
        try {
            Thread.sleep(getRandom());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return sInstance;
    }

    public static long getRandom(){
        Random random = new Random();
        int max = 1000;
        int min =100;
        return random.nextInt(max)%(max-min+1)+min;
    }
}
fd45cd716d311cf4ba67d612d5b352c.png
3.懒汉式单例: 可以在用到时再加载单例对象
//饿汉式 线程安全 
class Single3{
    //volatile 防止指令重排 使双重检查不失效
    private volatile static Single3 mInstance;

    private Single3(){}
    //锁住的资源太大
//    public synchronized static  Single3 getInstance(){
//        if(mInstance==null)
//            mInstance = new Single3();
//        return mInstance;
//    }
    //采用DCL 双重校验
    public static Single3 getInstance(){
        if(mInstance==null){
            synchronized (Single3.class){
                if(mInstance==null){
                    mInstance = new Single3();
                }
            }
        }
        return mInstance;
    }
}
e95da3e4e59025a7bfa9f3a15d4bcbc.png
5f161ff85956776be8a41c5c750a2b5.png
4.静态内部类单例:优点延迟加载
class Single4{
    private Single4(){}
    static class SigleHandler{
         public static   Single4 INSTANCE= new Single4();
    }
    public static Single4 getInstance(){
        return Single4.SigleHandler.INSTANCE;
    }
}
205b2809df47ee7fecb1fe7d2d5acb7.png
5.枚举构建单例:枚举本身就是线程安全的
//枚举单例
class Single5{
    private Single5(){}
     public  enum SingelDealer{
        SINGEL_DEALER;
        private  Single5 single5;
        private   SingelDealer(){
            single5 = new Single5();
        }

        public Single5 getSingle5(){
            return single5;
         }

    }
    public static Single5 getInstance(){
        return SingelDealer.SINGEL_DEALER.getSingle5();
    }
}
478f53d9c98be4dcb074cfed3caf078.png
6.容器单例:
//容器单例 安卓常用 getSystemService(NOTIFICATION_SERVICE)就是用这种模式
class Single6{
    private  static  HashMap<String,Object> mServiceList = new HashMap<>();
    public static void registerService(String key,Object service){
        if(!mServiceList.containsKey(key)){
            mServiceList.put(key,service);
        }
    }
    public static Object getService(String key){
        return mServiceList.get(key);
    }
}

相关文章

  • python之理解单例模式

    python之理解单例模式 1、单例模式 单例模式(Singleton Pattern)是一种常见的软件设计模式,...

  • 【Java】设计模式 —— 深入浅出单例模式

    学习笔记 参考:深入浅出单实例SINGLETON设计模式单例模式【Java】设计模式:深入理解单例模式 场景:一般...

  • Go语言设计模式(1)单例模式

    Go语言设计模式(1)单例模式 单例模式的定义 个人认为单例模式是23种设计模式中最简单也最好理解的一种,定义如下...

  • 单例模式

    单例设计模式是几种设计模式中比较容易理解的,手写单例模式也是面试频繁问到的。下面总结一下单例模式的几种写法: //...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • Java四种单例设计模式

    Java中的四种单例模式 单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。 1.基本单例模式...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • Java设计模式 - 单例模式

    Java设计模式已是老生常谈,单例模式是Java设设计模式中,相对比较容易理解的一个模式。 先来看下,单例模式的特...

网友评论

      本文标题:单例设计模式理解

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