zoukankan      html  css  js  c++  java
  • 单例模式

      面试题遇到写一个“单例模式” ,哭唧唧。

      曾经精通二十多种(常用)设计模式的我,因为太久没复习,忘得一干二净了......呜呜呜,幸亏过后想到了,不知道有没有错~~

      现在复习一下单例模式,为什么?可能现在用得还比较少吧,所以觉得没什么用,但意义总是迟来的。学多点总是没错的嘛~

    单例的好处:https://www.cnblogs.com/seesea125/archive/2012/04/05/2433463.html  附上链接。

      

      单例分懒汉式饿汉式:

    懒汉式:

    public class Singleton {
        private volatile static Singleton instance = null;
        // 私有化构造方法
        private Singleton() {}
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }

      懒汉模式中单例是在需要的时候才去创建的,如果单例已经创建,再次调用获取接口将不会重新创建新的对象,而是直接返回之前创建的对象。懒汉式是定性的时间换空间,如果某个单例使用的次数少,并且创建单例消耗的资源较多,那么就需要实现单例的按需创建,这个时候使用懒汉模式就是一个不错的选择。但是这里的懒汉模式并没有考虑线程安全问题,在多个线程可能会并发调用它的getInstance()方法,导致创建多个实例,因此需要加锁解决线程同步问题。单例模式的懒汉式体现了缓存的思想,延时加载就是一开始不要加载资源或者数据,一直 等,等到马上就要使用这个资源的或者数据了,躲不过去了才去加载。

    饿汉式:

    public class Singleton {
        private static Singleton instance = new Singleton();
     
        // 私有化构造方法
        private Singleton() {
     
        }
     
        public static Singleton getInstance() {
            return instance;
    }

      从代码中我们看到,类的构造函数定义为private的,保证其他类不能实例化此类,然后提供了一个静态实例并返回给调用者。

      饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要判断了,节省了运行时间。

      它的好处是只在类加载的时候创建一次实例,不会存在多个线程创建多个实例的情况,避免了多线程同步的问题。它的缺点也很明显,即使这个单例没有用到也会被创建,而且在类加载之后就被创建,内存就被浪费了。
      

      

  • 相关阅读:
    float浮动
    数据库基础操作
    Python re 模块
    I/O模型的使用
    函数形参与实参
    内置函数重写_运算符重载
    导入模块_导入包_标准库模块
    异常处理
    闭包
    函数式编程
  • 原文地址:https://www.cnblogs.com/fzzzjjj/p/11574401.html
Copyright © 2011-2022 走看看