package com.cheng.zenofdesignpatterns.extension.newpatterns.objectpool; import java.util.Hashtable; /** * 对象池示例 */ public abstract class ObjectPool<T> { // 容器,容纳对象 private Hashtable<T, ObjectStatus> pool = new Hashtable<>(); // 初始化时创建对象,并放入到池中 public ObjectPool() { pool.put(create(), new ObjectStatus()); } // 从Hashtable中取出空闲元素 public synchronized T checkOut() { // 这是最简单的策略 for (T t : pool.keySet()) { if (pool.get(t).validate()) { pool.get(t).setUsing(); return t; } } return null; } // 创建池化对象 public abstract T create(); // 归还元素 public synchronized void checkIn(T t) { pool.get(t).setFree(); } class ObjectStatus { // 占用 public void setUsing() { } // 释放 public void setFree() { // 注意:若T是有状态,则需要回归到初始状态 } // 检查是否可用 public boolean validate() { return false; } } }