zoukankan      html  css  js  c++  java
  • 《图解设计模式》读书笔记3-1 Singleton模式

    单例模式

    确保任何情况下都只有一个实例

    饿汉式

    public class Singleton {
        //在类被加载的时候运行一次,这是本类构造函数的唯一一次使用。
        //未被使用之前就已经实例化完成,称为饿汉式
        private static Singleton singleton = new Singleton();
    
        //构造函数为私有的,只有本类才能构造实例
        private Singleton() {
            System.out.println("生成了一个Singleton实例");
        }
    
        //外界只能通过唯一的getInstance方法获得这个唯一的实例
        public static Singleton getInstance() {
            return singleton;
        }
    }
    

    优点:实现简单,没有线程同步问题。
    缺点:实例会一直占用内存,浪费空间。

    懒汉式

    public class Singleton2 {
        private static Singleton2 instance;
    
        private Singleton2() {}
    
        public static Singleton2 getInstance() {
            //在别人需要的时候才开始实例化
            if(instance == null) {
                instance = new Singleton2();
            }
            return instance;
        }
    }
    

    优点:实例化推迟到需要之时,不浪费内存空间。
    缺点:线程不安全

    线程安全的懒汉式

    public class Singleton3 {
        private static Singleton3 instance;
    
        private Singleton3() {}
    
        public static Singleton3 getInstance() {
            if(instance == null) {
                //需要时创建,并且只对关键代码块加锁,保证性能
                synchronized (Singleton3.class) {
                    if (instance == null) {
                        instance = new Singleton3();
                    }
                }
            }
            return instance;
        }
    }
    

    优点:推迟加载,占用空间少,线程安全
    缺点:麻烦

  • 相关阅读:
    java加密解密用法
    进程和线程
    office使用技巧
    apktool+dex2jar+jd_gui
    shell编程学习
    编程常犯的错误
    编程语言学习清单
    使用github托管自己的项目
    c# 异常 的 异想
    DNLA自学(一) UPnP设备发现
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10992887.html
Copyright © 2011-2022 走看看