java单例设计模式-饿汉式-懒汉式 下载本文

内容发布更新时间 : 2024/5/11 20:21:31星期一 下面是文章的全部内容请认真阅读。

单例设计模式-------懒汉式,饿汉式

单例设计模式是一种很常见的设计模式 在这里介绍两种单例设计模式 懒汉式与饿汉式 一、先说一说单例设计模式的特点:

>>1.单例设计模式保证一个类只有一个实例。 >>2.要提供一个访问该类对象实例的全局访问点。 二、单例设计模式要点

对一些类来说,只有一个实例是很重要的。例如很多时候对于某个系统只需要拥有一个全局对象,这样有利于我们协调系统的整体行为。

再比如说某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象

再通过这个单例对象获取这些配置信息。从而简化了在比较复杂的环境下配置管理。 通过上面的介绍,我们可以知道单例模式最重要的就是要保证一个类只有一个实例并且这个类易于被访问,那么要怎么做才能保证一个类具有一个实例呢?一个全局变量使得一个对象可以被访问,但是这样做却不能防止你实例化多个对象。

一个更好的办法就是,让该类自身负责保存它的唯一实例。并且这个类保证没有其他的实例可以被创建。

怎样保证一个对象的唯一总结如下:

>>1.为了避免其它程序过多的建立该类的对象,先禁止其它程序建立该类对象实例(将构造器私有化)

>>2.为了方便其它程序访问该类的对象,只好在本类中自定义一个对象,由1可知该对象是static的,并对外提供访问方式。

三、分析举例

在JAVA中单例设计模式 1. 饿汉式如下所示

2.懒汉式如下所示

3.测试是否保证了对象的唯一性:

通过上述测试我们看到的结果:饿汉式和懒汉式都保证了对象的唯一。 到此我们总结两点:

>>1.饿汉式这种方式加载类对象,我们称作:预先加载方式。 >>2.懒汉式这种方式加载类对象,我们称作:延迟加载方式。

问题:上述程序只是在只有主线程一个线程运行下的测试结果,要是在多线程环境下又会出现什么样的结果呢?这里预先说明一下

其实在多线程的环境下,饿汉式是没有问题的,但是懒汉式这种延迟加载的方式会出现线程安全问题的,下面我们通过例子加以说明。