From 2f5a68c8a5a36f916ccd13f3bc8c3c320da3648e Mon Sep 17 00:00:00 2001 From: kingery Date: Sun, 20 Mar 2022 20:38:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(LazyFunLoader):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=9D=99=E6=80=81=E5=B7=A5=E5=8E=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/lang/loader/LazyFunLoader.java | 11 ++++++++ .../core/lang/loader/LazyFunLoaderTest.java | 28 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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 index e50e80a76..3cc626a6f 100644 --- 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 @@ -24,6 +24,17 @@ public class LazyFunLoader extends LazyLoader { */ private Supplier supplier; + /** + * 静态工厂方法,提供语义性与编码便利性 + * @param supplier 用于生成对象的函数 + * @param 对象类型 + * @return 函数式懒加载加载器对象 + */ + public static LazyFunLoader onLoad(final Supplier supplier) { + Assert.notNull(supplier, "supplier"); + return new LazyFunLoader<>(supplier); + } + /** * 构造 * diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/loader/LazyFunLoaderTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/loader/LazyFunLoaderTest.java index 6de9cb529..0e35bf717 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/loader/LazyFunLoaderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/loader/LazyFunLoaderTest.java @@ -42,4 +42,32 @@ public class LazyFunLoaderTest { Assert.assertFalse(loader.isInitialize()); } + + @Test + public void testOnLoadStaticFactoryMethod1() { + + LazyFunLoader loader = LazyFunLoader.onLoad(BigObject::new); + + Assert.assertNotNull(loader.get()); + Assert.assertTrue(loader.isInitialize()); + + // 对于某些对象,在程序关闭时,需要进行销毁操作 + loader.ifInitialized(BigObject::destroy); + + Assert.assertTrue(loader.get().isDestroy); + } + + @Test + public void testOnLoadStaticFactoryMethod2() { + + LazyFunLoader loader = LazyFunLoader.onLoad(BigObject::new); + + // 若从未使用,则可以避免不必要的初始化 + loader.ifInitialized(it -> { + + Assert.fail(); + it.destroy(); + }); + + } }