单利模式-懒汉式-饿汉式
来源:互联网 发布:wap网投源码 编辑:程序博客网 时间:2024/06/13 21:40
本文是设计模式学习笔记的第二篇文章,主要分析的是单例模式。包括懒汉式,饿汉式,登记式,以及懒汉式的改进型,还有一个关于读取propertoes配置文件的实例。预计分为三节。这是第一节,先分析最简单的懒汉式和饿汉式。单例模式是设计模式中比较简单的一种。适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。 单例模式的用意在于前一段中所关心的。通过单例模式你可以: 一、确保一个类只有一个实例被建立 二、提供了一个对对象的全局访问指针 三、在不影响单例类的客户端的情况下允许将来有多个实例经典的单例模式有三种,懒汉式、饿汉式和 登记式。懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的时候才会加载。。。。。。
饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。
让我们先看下代码:
懒汉式:
看下客户端的测试代码:输出结果为:
-----------------懒汉式单例模式----------------
第一次取得实例(懒汉式)
-->懒汉式单例模式开始调用公有方法返回实例
-->懒汉式构造函数的实例当前并没有被创建
-->懒汉式单例模式开始调用构造函数
-->方法调用结束,返回单例
第二次取得实例(懒汉式)
-->懒汉式单例模式开始调用公有方法返回实例
-->懒汉式构造函数的实例已经被创建
-->方法调用结束,返回单例
>>>>>s1,s2为同一实例(懒汉式)<<<<<
可以看出,在第一次调用公有方法的时候,并没有实例,所以我们创建了一个实例,之后再访问的时候,因为已经有一个已经创建好的实例,所以直接返回了。
饿汉式:
看下客户端的测试代码:
输出结果为:
-----------------饿汉式单例模式----------------
第一次取得实例(饿汉式)
-->饿汉式单例模式开始调用构造函数
-->饿汉式单例模式开始调用公有方法返回实例
第二次取得实例(饿汉式)
-->饿汉式单例模式开始调用公有方法返回实例
>>>>>s1,s2为同一实例(饿汉式)<<<<<
总结一下,两种方案的构造函数和公用方法都是静态的(static),实例和公用方法又都是私有的(private)。但是饿汉式每次调用的时候不用做创建,直接返回已经创建好的实例。这样虽然节省了时间,但是却占用了空间,实例本身为static的,会一直在内存中带着。懒汉式则是判断,在用的时候才加载,会影响程序的速度。最关键的是,在并发的情况下,懒汉式是不安全的。如果两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。
个人总结:
懒汉模式:等用到的时候创建实例,将对象赋给静态的类的对象 线程不安全的,
饿汉模式:创建类的时候就创建一个静态实例对象,用到的时候直接返回就可以 线程安全
- 单利模式-懒汉式-饿汉式
- 单利模式的懒汉式和饿汉式:
- 单利模式:懒汉式和饿汉式
- 线程简介--单利模式饿汉式和懒汉式
- 懒汉式单利模式多线程终极解决方案
- 懒汉式单利同步链接jdbc数据库
- 黑马程序员——多线程——单利设计模式之——懒汉式
- 饿汉式、懒汉式singleton模式
- 设计模式-饿汉式、懒汉式
- 例模式:饿汉式,懒汉式+工厂模式
- java的设计模式之单利设计模式(饿汉和懒汉)
- 单例模式 饿汉式 懒汉式
- .两种单例模式:饿汉式与懒汉式
- 【单例模式】饿汉式&懒汉式
- 两种单例模式:饿汉式与懒汉式
- 懒汉式 && 饿汉式 的单例模式
- 单例模式-饿汉式和懒汉式
- 单例设计模式 饿汉式 懒汉式
- oracle 分组后取每组第一条数据
- Java中 = 和 += 的区别
- Android kotlin入门与基础语法一
- 导入开源库后,出现java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins异常
- linux 文件类型
- 单利模式-懒汉式-饿汉式
- 阿里云主机安装oracle11g 交换空间不足
- Java基础
- Android 自定义相机 身份证拍照 自定义身份证相机
- 自动跳转文本的实现
- System.out.print("Hello CSDN!")
- native与html交互小记
- ubuntu下安装OpenJDK 7
- Shell脚本——make命令和Makefile文件