package api; /** * Implementation must be thread-safe. * @author Pete Cappello */ abstract public class Aggregator<ElementType> implements java.io.Serializable { protected ElementType element; public Aggregator() { element = identityElement(); } public Aggregator( ElementType element ) { this.element = element; } abstract public void aggregate( Aggregator<ElementType> aggregator ); public ElementType get() { return element; } abstract public ElementType identityElement(); /* * @return a new Aggregator object */ abstract public Aggregator make(); public void set( Aggregator<ElementType> aggregator ) { element = aggregator.get(); } }