java设计模式: 单例设计模式
单例模式: 一个类只有一个实例对象, 如果一个类比较大频繁对类进行销毁和创建浪费性能, 如果类是可以复用的就可以使用单例模式。
1.线程安全。synchronized关键字。
2.是否懒加载。懒加载好处,假如对象在程序启动的时候就构建, 万一没有使用过就比较浪费性能了。
3.是否反射破坏。枚举类, 但是不能实现懒加载。
单例模式:
package com.ultiwill.test.designpattern; /** * 单例设计模式 * * @author chong.zuo * @date 2020/9/28 15:45 */ public class LazySingletonTest { public static void main(String[] args) { LazySingleton instance1 = LazySingleton.getInstance(); LazySingleton instance2 = LazySingleton.getInstance(); System.out.println(instance1 == instance2); } } /** * 懒汉式 * 当类被第一次调用时候就会创建类实例, */ class LazySingleton { /** * 本类内部创建对象实例
* volatile 阻止指令重排问题 */ private volatile static LazySingleton lazySingleton; /** * 构造方法私有化,外部不能new */ private LazySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static LazySingleton getInstance() { if (lazySingleton == null) { synchronized (LazySingleton.class) { if (lazySingleton == null) { return lazySingleton = new LazySingleton(); } } } return lazySingleton; } } /** * 饿汉式 * 当类初始化时候就会创建类实例, * 不管你用不用,先创建出来,然后每次调用的时候,就不需要判断了,节省了运行时间。 */ class HungrySingleton { /** * 本类内部创建对象实例 */ private static HungrySingleton hungrySingleton = new HungrySingleton(); /** * 构造方法私有化,外部不能new */ private HungrySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static HungrySingleton getInstance() { return hungrySingleton; } }