de.team33.patterns.pooling.ariel.XProvider Maven / Gradle / Ivy
Show all versions of pooling-ariel Show documentation
package de.team33.patterns.pooling.ariel;
import de.team33.patterns.exceptional.dione.XSupplier;
/**
* A tool that makes instances of a certain type available for the course of operations that require such an instance.
* The instances provided are referred to as item in the following.
*
* The tool maintains a number of such items and only creates as many as are actually required at most at
* the same time in its application context. The items are retained and reused for subsequent operations.
*
* In this respect, this tool is suitable for providing item types whose instantiation is relatively
* "expensive", which are rather unsuitable for concurrent access, but are designed for multiple or permanent use.
* Database or other client-server connections may be an example.
*
* Note: this implementation cannot detect when an internal operation is taking place in the course of an operation to
* which the same item could be made available.
*
* This implementation supports checked exceptions to occur while creating new item instances.
*
* @param The type of provided instances (items)
* @param A type of exception that may be caused by the creation of new item instances.
* @see Provider
* @see RProvider
* @see XRProvider
*/
public class XProvider extends XProviderBase {
/**
* Initializes a new instance giving an {@link XSupplier} that defines the intended initialization of a
* new item.
*/
public XProvider(final XSupplier newItem) {
super(() -> {
final I item = newItem.get();
return () -> item;
});
}
}