单例模式

    xiaoxiao2021-03-26  23

    单例模式:

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

    举例:

    配置文件、工具类、线程池、缓存、日志对象等

    常用的单例模式有两种: 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是同一个实例。

    饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。

    懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。

    转载请注明原文地址: https://ju.6miu.com/read-662318.html

    最新回复(0)