欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式——单列模式

程序员文章站 2022-03-10 17:31:25
单列模式是设计模式中使用最为普遍的模式之一,它是一种对象创建模式,用于产生一个对象的实例,它可以确保一个类只产生一个实例。 单例模式的两大好处: 1.对于频繁使用的对象,可以省略创建对象花费的时间。 2.因为new减少,所以对内存使用频率降低,可以减少gc压力,缩短jc停顿时间。 单例类实现方式:使 ......

单列模式是设计模式中使用最为普遍的模式之一,它是一种对象创建模式,用于产生一个对象的实例,它可以确保一个类只产生一个实例。

单例模式的两大好处:

1.对于频繁使用的对象,可以省略创建对象花费的时间。

2.因为new减少,所以对内存使用频率降低,可以减少gc压力,缩短jc停顿时间。

单例角色 角色 作用 单例类 提供单例工厂,返回单例 使用者 获取并使用单例

单例类实现方式:使用内部类的方式实现单例,既可以做到延迟加载,又不必使用同步关键字,是一种比较完善的方式。

 1 public class Singleton{
 2   private Singleton(){}
 3   private static class SingletonHolder{
 4         private static Singleton instance = new Singleton();    
 5   }    
 6   
 7   public static Singleton getInstance(){
 8          return SingletonHolder.instance;    
 9     }
10 
11 
12 }

注意:序列化和反序列可能会破坏单例,一般来说,对单列进行序列化和反序列化的场景并不多见,但如果存在就需要注意。

package com.design.singleton;

import java.io.Serializable;

public class SerSingleton implements Serializable {
    private static final long serialVersionUID = 1L;
    private SerSingleton(){}
    private static class SerSingletonHolder{
        private static SerSingleton serSingleton = new SerSingleton();
    }
    
    public static SerSingleton getInstance(){
        return SerSingletonHolder.serSingleton;
    }
    /**
     * 阻止生成新的实例,总是返回当前实例
     * @return
     */
    private Object readResolve(){
        return SerSingletonHolder.serSingleton;
    }
    
}