mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-15 22:58:59 +00:00
35 lines
773 B
Java
35 lines
773 B
Java
package com.iluwatar;
|
|
|
|
import java.util.function.Supplier;
|
|
|
|
/**
|
|
*
|
|
* This lazy loader is thread safe and more efficient than HolderThreadSafe.
|
|
* It utilizes Java 8 functional interface Supplier<T> as Heavy factory.
|
|
*
|
|
*/
|
|
public class Java8Holder {
|
|
|
|
private Supplier<Heavy> heavy = () -> createAndCacheHeavy();
|
|
|
|
public Java8Holder() {
|
|
System.out.println("Java8Holder created");
|
|
}
|
|
|
|
public Heavy getHeavy() {
|
|
return heavy.get();
|
|
}
|
|
|
|
private synchronized Heavy createAndCacheHeavy() {
|
|
class HeavyFactory implements Supplier<Heavy> {
|
|
private final Heavy heavyInstance = new Heavy();
|
|
@Override
|
|
public Heavy get() { return heavyInstance; }
|
|
}
|
|
if (!HeavyFactory.class.isInstance(heavy)) {
|
|
heavy = new HeavyFactory();
|
|
}
|
|
return heavy.get();
|
|
}
|
|
}
|