/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.factory;
/**
* A factory that can not determines all its dependencies at construction time.
* Because this factory may creates new factories at any time, it must keep all
* user-supplied hints. The general contract of {@link #hints} said that we can't
* use this field for creating new factories. But instances of this classe are special cases
* where we can, because this class retains all user-supplied hints.
*
* <p>Extends this class only if you really need to keep all user-supplied hints, because
* doing so has a cost:</p>
* <ul>
* <li><p>{@link FactoryRegistry} is less likely to reuse existing factory instances, because
* any value found in {@link #hints} that do not agree with a user-supplied hint will cause
* {@code FactoryRegistry} to discarts this instance, even if the hint was actually
* irrelevant to this factory.</p></li>
* <li><p>The user-supplied hints may contain references to big objects (for example a coordinate
* transform backed by a grid), and some of them may not be relevant to this factory.
* Retaining all hints will prevents their garbage collection.<p></li>
* </ul>
*
* @source $URL$
* @version $Id$
* @author Martin Desruisseaux
*
* @deprecated This class should be a marker interface instead of an {@code AbstractFactory}
* subclass. We will make this change in a future version. When this change is
* done, {@link org.geotools.referencing.factory.AllAuthoritiesFactory} should
* implement this interface.
*/
public interface FactoryUsingVolatileDependencies extends Factory {
}