• 每日一题 为了工作 2020 0415 第四十四题


    *单例设计模式

    /**
     * 单例设计模式
     * 单例模式便是创建型设计模式的一种,它确保某一个类在系统中只有一个实例,并自行实例化,
     * 同时向外部提供获取这个唯一实例的接口。从这段描述中,我们不难可以得到单例模式的三大特性:
     * 1.单例类只有一个实例。
     * 2.单例类必须自己实例化自己。
     * 3.单例类需要向外提供实例。
     * 实现一:立即加载 <==>“饿汉模式”
     * 立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。
     * 很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化。
     * “饿汉模式”的优缺点:
     * 优点:实现起来简单,没有多线程同步问题。
     * 缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,
     * 从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,
     * 静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。
     */
    public class Singleton {
         //将自身对象实例化为一个属性 并利用static,final修饰
        private static final Singleton instance = new Singleton();
         //构造方法私有化
        private Singleton(){}
        //利用静态方法返回实例
        public static Singleton getInstance(){
            return Singleton.instance;
        }
    }
    

      

    /**
     * 单例构造模式
     * 实现二:延迟加载 / “懒汉模式”
     *
     * 延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。
     * 不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。
     *“懒汉模式”的优缺点:
     * 优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并
     * 分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些
     * 特定条件下会节约了内存。
     * 缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。
     */
    public class SingletonTwo {
        //将自身实例化对象设置为一个属性,并利用static修饰
        private static SingletonTwo instanceTwo;
        //构造方法私有化
        private SingletonTwo(){}
        //利用静态方法返回该类的实例化对象
        public static SingletonTwo getInstanceTwo(){
    //        线程不安全
    //        if (instanceTwo == null){
    //            instanceTwo = new SingletonTwo();
    //        }
    //        return instanceTwo;
    //        线程安全
            if (instanceTwo == null){
                //加锁
                //某个线程取得了类锁,实例化对象第二次检查instancdTwo的时候
                //查看该类是否已经被实例化出来了,如果没有最终进行类的实例化
                synchronized (SingletonTwo.class){
                    if (instanceTwo == null){
                        instanceTwo = new SingletonTwo();
                    }
                }
            }
            return instanceTwo;
        }
    }
    

      

  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/walxt/p/12708736.html
Copyright © 2020-2023  润新知