From 496857e67a4f3609009efe18d24372707dec222e Mon Sep 17 00:00:00 2001
From: "Mr.Po" <504919167@qq.com>
Date: Tue, 16 Mar 2021 10:25:50 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ELazyFunLoader?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/lang/loader/LazyFunLoader.java | 46 +++++++++++++++++++
1 file changed, 46 insertions(+)
create mode 100644 hutool-core/src/main/java/cn/hutool/core/lang/loader/LazyFunLoader.java
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/loader/LazyFunLoader.java b/hutool-core/src/main/java/cn/hutool/core/lang/loader/LazyFunLoader.java
new file mode 100644
index 000000000..0b609c47b
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/loader/LazyFunLoader.java
@@ -0,0 +1,46 @@
+package cn.hutool.core.lang.loader;
+
+import cn.hutool.core.lang.Assert;
+
+import java.util.function.Supplier;
+
+/**
+ * 函数式懒加载加载器
+ * 传入用于生成对象的函数,在对象需要使用时调用生成对象,然后抛弃此生成对象的函数。
+ * 此加载器常用于对象比较庞大而不一定被使用的情况,用于减少启动时资源占用问题
+ * 继承自{@link LazyLoader},如何实现多线程安全,由LazyLoader完成。
+ *
+ * @param 被加载对象类型
+ * @author Mr.Po
+ * @see cn.hutool.core.lang.loader.LazyLoader
+ */
+public final class LazyFunLoader extends LazyLoader {
+
+ /**
+ * 对象生成函数
+ */
+ private Supplier supplier;
+
+ public LazyFunLoader(Supplier supplier) {
+ Assert.notNull(supplier);
+ this.supplier = supplier;
+ }
+
+ @Override
+ protected T init() {
+
+ T t = this.supplier.get();
+ this.supplier = null;
+
+ return t;
+ }
+
+ /**
+ * 是否已经初始化
+ *
+ * @return 是/否
+ */
+ public boolean isInitialize() {
+ return this.supplier == null;
+ }
+}