保证整个应用中某个实例有且只有一个。
举例:
配置文件、工具类、线程池、缓存、日志对象等
常用的单例模式有两种: 1.饿汉模式 2.懒汉模式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是同一个实例。饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。
