Added comments.
This commit is contained in:
		| @@ -1,5 +1,23 @@ | |||||||
| package com.iluwatar; | package com.iluwatar; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * When it is necessary to work with a large number of objects that are particularly expensive to instantiate  | ||||||
|  |  * and each object is only needed for a short period of time, the performance of an entire application may be  | ||||||
|  |  * adversely affected. An object pool design pattern may be deemed desirable in cases such as these.  | ||||||
|  |  *  | ||||||
|  |  * The object pool design pattern creates a set of objects that may be reused. When a new object is needed, it  | ||||||
|  |  * is requested from the pool. If a previously prepared object is available it is returned immediately, avoiding  | ||||||
|  |  * the instantiation cost. If no objects are present in the pool, a new item is created and returned. When the  | ||||||
|  |  * object has been used and is no longer needed, it is returned to the pool, allowing it to be used again in the  | ||||||
|  |  * future without repeating the computationally expensive instantiation process. It is important to note that  | ||||||
|  |  * once an object has been used and returned, existing references will become invalid. | ||||||
|  |  *  | ||||||
|  |  * In this example we have created OliphauntPool inheriting from generic ObjectPool. Oliphaunts can be checked | ||||||
|  |  * out from the pool and later returned to it. The pool tracks created instances and their status (available, | ||||||
|  |  * inUse). | ||||||
|  |  * | ||||||
|  |  */ | ||||||
| public class App { | public class App { | ||||||
| 	 | 	 | ||||||
|     public static void main( String[] args ) { |     public static void main( String[] args ) { | ||||||
|   | |||||||
| @@ -2,10 +2,16 @@ package com.iluwatar; | |||||||
|  |  | ||||||
| import java.util.HashSet; | import java.util.HashSet; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * Generic object pool | ||||||
|  |  * | ||||||
|  |  * @param <T> | ||||||
|  |  */ | ||||||
| public abstract class ObjectPool<T> { | public abstract class ObjectPool<T> { | ||||||
|  |  | ||||||
| 	HashSet<T> available = new HashSet<>(); | 	private HashSet<T> available = new HashSet<>(); | ||||||
| 	HashSet<T> inUse = new HashSet<>(); | 	private HashSet<T> inUse = new HashSet<>(); | ||||||
| 	 | 	 | ||||||
| 	protected abstract T create(); | 	protected abstract T create(); | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -1,5 +1,10 @@ | |||||||
| package com.iluwatar; | package com.iluwatar; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * Oliphaunts are expensive to create | ||||||
|  |  * | ||||||
|  |  */ | ||||||
| public class Oliphaunt { | public class Oliphaunt { | ||||||
| 	 | 	 | ||||||
| 	private static int counter = 1; | 	private static int counter = 1; | ||||||
| @@ -8,6 +13,11 @@ public class Oliphaunt { | |||||||
| 	 | 	 | ||||||
| 	public Oliphaunt() { | 	public Oliphaunt() { | ||||||
| 		id = counter++; | 		id = counter++; | ||||||
|  | 		try { | ||||||
|  | 			Thread.sleep(1000); | ||||||
|  | 		} catch (InterruptedException e) { | ||||||
|  | 			e.printStackTrace(); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	public int getId() { | 	public int getId() { | ||||||
|   | |||||||
| @@ -1,5 +1,10 @@ | |||||||
| package com.iluwatar; | package com.iluwatar; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * Oliphaunt object pool | ||||||
|  |  * | ||||||
|  |  */ | ||||||
| public class OliphauntPool extends ObjectPool<Oliphaunt> { | public class OliphauntPool extends ObjectPool<Oliphaunt> { | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user