1. Introducción al Proveedor
¿Cuáles son los beneficios de Proveedor? También hay diferentes opiniones sobre esto en Internet: el proveedor puede no ser tan fácil de entender como el predicado , el consumidor y la función presentados anteriormente . La introducción oficial es:
Representa un proveedor de resultados que no requiere que se devuelvan resultados nuevos o diferentes cada vez que se llama al proveedor.
El código fuente es el siguiente:
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
Podemos usar Proveedor para representar cómo obtener un resultado. Cuando necesitemos el resultado, podemos llamar a la función get() para obtener el resultado. Da un ejemplo sencillo:
Suppliper<Person> supplier = Person::new;
Person p = supplier.get();
El ejemplo anterior describe cómo obtener un objeto Persona. Sí, es un ejemplo muy simple. Esto también ha llevado a muchas personas a pensar que no hay necesidad de Proveedor. De hecho, si es solo un nuevo objeto simple, usar Proveedor es De hecho, es un pequeño problema. Una obra maestra.
Lo que debes entender es que utilizar Proveedor te ayuda a obtener un resultado, que puede ser un objeto o un valor fijo. Cuando descubra que se requieren una serie de operaciones engorrosas para obtener un resultado, puede considerar utilizar Proveedor para expresar cómo obtener el resultado.
Lo que hay que tener en cuenta aquí es no confundirlo con Consumidor y Función. En primer lugar, la función get() del Proveedor no tiene parámetros y su objetivo es obtener resultados. Tanto el Consumidor como la Función necesitan pasar un parámetro. El Consumidor se centra en el proceso de procesamiento y la Función se centra en el proceso y los resultados.
2. Implementar la clase SingletonSupplier
Si solo utiliza la interfaz del Proveedor, en muchos casos puede resultar difícil satisfacer las necesidades comerciales y deberá implementar la interfaz del Proveedor. Tome Spring como ejemplo SingletonSupplier
. Utilizándolo, podemos mantener fácilmente un singleton.
No entraré en el código fuente específico, veamos cómo implementar SingletonSupplier
un singleton:
public class Person {
private static SingletonSupplier<Person> holder = new SingletonSupplier<>(null, Person::new);
private Person() {
}
public static Person getInstance() {
return holder.get();
}
}
¿Es sencillo el proceso de implementación? Y este sigue siendo un singleton vago, y solo se creará una nueva instancia cuando se use.
3. Otras variaciones del Proveedor
Nombre de la interfaz | parámetro | Tipo de devolución | describir |
---|---|---|---|
Proveedor booleano | ninguno | booleano | El resultado es de tipo booleano. |
DobleProveedor | ninguno | booleano | El resultado es de tipo Doble |
ProveedorInt | ninguno | booleano | El resultado es de tipo int |
Proveedor largo | ninguno | booleano | El resultado es de tipo Largo |
Recomendación de artículo:
[JDK durmiente] Explicación detallada del predicado de la interfaz de programación funcional de Java
[JDK dormido] Explicación detallada de la interfaz de programación funcional de Java UnaryOperator, BinaryOperator