01: /* ====================================================================
02: The Jicarilla Software License
03:
04: Copyright (c) 2003 Leo Simons.
05: All rights reserved.
06:
07: Permission is hereby granted, free of charge, to any person obtaining
08: a copy of this software and associated documentation files (the
09: "Software"), to deal in the Software without restriction, including
10: without limitation the rights to use, copy, modify, merge, publish,
11: distribute, sublicense, and/or sell copies of the Software, and to
12: permit persons to whom the Software is furnished to do so, subject to
13: the following conditions:
14:
15: The above copyright notice and this permission notice shall be
16: included in all copies or substantial portions of the Software.
17:
18: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19: EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20: MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21: IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22: CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23: TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24: SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25: ==================================================================== */
26: package org.jicarilla.lang;
27:
28: /**
29: * <p>An interface implemented by objects which can be fully recycled.
30: * Recycling involves a component being cleansed of all its state.</p>
31: *
32: * <p>Recycling objects can be useful to speed up performance by avoiding the
33: * 'new' operator. Recycling of objects is often done when pooling them, and
34: * using the {@link org.jicarilla.lang.RecyclingObjectFactory
35: * RecyclingObjectFactory} class with <a href="http://jakarta.apache.org/commons/pool">commons-pool</a>
36: * is a good way to make that as easy as possible.</p>
37: *
38: * <p>However, even when you are not using pooling, the <code>recycle()</code>
39: * method may be of use. For example, in conjuction with the {@link
40: * ReadonlyEnabled ReadonlyEnabled interface}... you could use
41: * <code>makeReadonly()</code> to lock an immutable object, then at some later
42: * point <code>recycle()</code> that object, re-initializing it for a new
43: * task.</p>
44: *
45: * @author <a href="lsimons at jicarilla dot org">Leo Simons</a>
46: * @version $Id: Recyclable.java,v 1.1 2004/03/23 13:37:56 lsimons Exp $
47: */
48: public interface Recyclable {
49: /**
50: * Remove all state from the component, allowing it to be reused.
51: */
52: void recycle();
53: }
|