单例模式
2017-02-05 21:40
225 查看
单例模式:
保证整个应用中某个实例有且只有一个。举例:
配置文件、工具类、线程池、缓存、日志对象等
常用的单例模式有两种:
1.饿汉模式
2.懒汉模式
一.饿汉模式
步骤:
1.构造方法私有化.
(被private修饰的变量与方法只能在本类使用,因此外界无法通过构造方法直接创建对象,只能通过类名调用该类的public静态成员与方法.)
2.本类中直接创建一个类的唯一实例,并且是一个私有静态的实例.
3.创建一个公共的静态方法来返回该实例,外界可以直接通过类名调用该方法获取得到实例对象.
因为该唯一的实例是在该类被加载时就会去创建,(要早些时候吃饱)因此称为饿汉模式.
Singleton.java
package com.imooc; /** * @author 丁兆元 * @date 创建时间:2017年2月5日 下午8:26:35 * @version版本标识 1.0 * @parameter 参数及其意义 * @since 最早使用该方法/类/接口的JDK版本 * @return 返回值 */ public class Singleton { //1.将构造方法私有化,不允许直接创造对象 private Singleton() { } //2.创建类的唯一实例,使用private static 修饰 private static Singleton instance=new Singleton(); //3.提供一个用于获取实例的方法,使用public static 修饰 public static Singleton getInstance() { return instance; } }
二.懒汉模式
步骤:1.构造方法私有化
2.声明一个类的引用但不实例化,依然使用private static修饰.
3.创建一个公共静态方法,方法中需要判断该实例是否为null,即是否被实例化过,如果为null则创建一个实例,最后都返回该声明的引用.
Singleton2.java
package com.imooc; /** * @author 丁兆元 * @date 创建时间:2017年2月5日 下午9:08:35 * 懒汉模式 */ public class Singleton2 { //1.将构造方法私有化,不允许外边直接创造对象 private Singleton2() { } //2.声明类的唯一实例,使用private static修饰 private static Singleton2 instance; //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton2 getInstance() { if(instance==null) instance=new Singleton2(); return instance; } }
饿汉模式与懒汉模式区别在于对象在什么时候被实例化.
饿汉模式:当类被加载时就会去实例化对象,不管是否使用该对象.
懒汉模式:当外部要使用该对象时才会去实例化该对象,即当外部第一次调用该方法时才会去实例化对象,以后再次调用时直接返回该实例后的对象.
Test.java
package com.imooc; /** * @author 丁兆元 * @date 创建时间:2017年2月5日 下午8:28:01 * @version版本标识 1.0 * @parameter 参数及其意义 * @since 最早使用该方法/类/接口的JDK版本 * @return 返回值 */ public class Test { public static void main(String[] args) { Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); if(s1==s2) System.out.println("s1与s2是同一个实例。"); else System.out.println("s1与s2不是同一个实例。"); } }
s1与s2是同一个实例。 s3与s4是同一个实例。
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。
相关文章推荐
- 好书整理系列之-设计模式:可复用面向对象软件的基础 9
- OpenSource产品的商业操作模式
- COM组件中的线程模式
- 打开你的 DMA 模式 (转)
- 水木-Emacs 的 texinfo 模式 (三)
- 水木-Emacs 的 texinfo 模式 (二)
- 水木-Emacs 的 texinfo 模式(一)
- 虚拟8086模式的内存管理
- 16位BIT模式下的ALPHA运算
- 简析J2EE应用程序数据库类设计模式
- 探讨对等网络(P2P)商务模式
- 让DMA66 硬盘工作在DMA33 模式
- 闲聊设计模式和类
- MFC,STL与设计模式?
- 好书整理系列之-设计模式:可复用面向对象软件的基础 8
- [导入]让DMA66 硬盘工作在DMA33 模式
- 好书整理系列之-设计模式:可复用面向对象软件的基础 7
- 好书整理系列之-设计模式:可复用面向对象软件的基础 6
- 好书整理系列之-设计模式:可复用面向对象软件的基础 5.5