poolmanager.java

来自「thinking in patterns」· Java 代码 · 共 47 行

JAVA
47
字号
//: proxy:PoolManager.java
package proxy;
import java.util.*;

public class PoolManager {
  private static class PoolItem {
    boolean inUse = false;
    Object item;
    PoolItem(Object item) { this.item = item; }
  }
  public class ReleasableReference {  // Used to build the proxy
    private PoolItem reference;
    private boolean released = false;
    public ReleasableReference(PoolItem reference) {
      this.reference = reference;
    }
    public Object getReference() {
      if(released) 
        throw new RuntimeException(
          "Tried to use reference after it was released");
      return reference.item;
    }
    public void release() { 
      released = true;
      reference.inUse = false;
    }
  }
  private ArrayList items = new ArrayList();
  public void add(Object item) {
    items.add(new PoolItem(item));
  }
  // Different (better?) approach to running out of items:
  public static class EmptyPoolItem {}
  public ReleasableReference get() {
    for(int i = 0; i < items.size(); i++) {
      PoolItem pitem = (PoolItem)items.get(i);
      if(pitem.inUse == false) {
        pitem.inUse = true;
        return new ReleasableReference(pitem);
      }
    }
    // Fail as soon as you try to cast it:
    // return new EmptyPoolItem();
    return null; // temporary
  }
} ///:~

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?