• 单例模式


    一、作用:

    保证整个应用程序中某个实例有且只有一个。

    二、实现方式:

    饿汉式实现

    ⑴、将构造方法私有化,不允许外部直接创建对象;

    ⑵、创建类的唯一实例,使用private static修饰

    ⑶、提供一个用于获取实例的方法,使用public static修饰

    public class Singleton {
    
    	private Singleton(){		
    	}
    	
    	private static Singleton instance=new Singleton();
    	
    	public static Singleton getInstance(){
    		return instance;
    	}
    }

    懒汉式实现

    public class Singleton2 {
    
    	private Singleton2(){
    	}
    	
    	private static Singleton2 instance;
    	
    	public static Singleton2 getInstance(){
    		if(instance==null){
    			instance=new Singleton2();
    		}
    		return instance;
    	}
    }
    

    三、使用区别

    饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。
    如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

    懒汉式,是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量(鉴于同学们学习的进度,暂时不对线程的章节做展开)。
    使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

    看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式。

    面试回答:

    1. 构造方法私有化
    2. 静态属性指向实例
    3. public static的 getInstance方法,返回第二步的静态属性

  • 相关阅读:
    Rails坑之 gem 'pg', '0.15.1' 安装报错
    Ruby常用文件操作
    Linux各个目录浅析
    Ruby一行代码实现快速排序
    调试常用的方法
    Ruby实现冒泡排序
    Ruby代理例子
    新建一个包,并生成可以直接在命令行执行的指令
    Linux定时任务Crontab命令详解
    php安装完后配置php.ini和php-fpm.conf
  • 原文地址:https://www.cnblogs.com/darklights/p/11832744.html
Copyright © 2020-2023  润新知