WEB开发网
开发学院软件开发Java IOU 设计模式介绍及应用 阅读

IOU 设计模式介绍及应用

 2010-03-15 00:00:00 来源:WEB开发网   
核心提示: 清单 2. Escrow 接口定义publicinterfaceEscrow{//发行Iou对象IouissueIou();//终止Iou对象,参数是最终结果voidclose(Objecto);}Callback 接口定义IOU 模式中的回调机制主要是为了提供一种当 Iou 对象进入结果可赎回

清单 2. Escrow 接口定义

public interface Escrow 
{ 
  // 发行 Iou 对象 
  Iou issueIou(); 
   
  // 终止 Iou 对象,参数是最终结果 
  void close(Object o); 
} 

Callback 接口定义

IOU 模式中的回调机制主要是为了提供一种当 Iou 对象进入结果可赎回状态时能够立即执行某些回调动作的能力。每个回调对象都需实现 Callback 接口,并向感兴趣的 Iou 对象进行注册。每个 Iou 对象都会维护一个 Callback 对象列表,每个 Callback 对象在该 Iou 对象被终止时都有机会在结果对象上执行回调操作。Callback 接口定义见清单 3。

清单 3. Callback 接口定义

public interface Callback 
{ 
  // 在结果对象上执行回调任务 
  void callback(Object o); 
} 

IOU 模式的 Java 实现

Iou 接口侧重于债权人的操作,而 Escrow 侧重于债务人的操作,两个接口由同一个类来实现可以让实现变得更加简洁高效,具体实现见清单 4。

清单 4. RealIouEscrow 实现

public class RealIouEscrow implements Iou, Escrow 
{ 
  // Vector to hold all callbacks 
  private Vector callbacks; 
  // boolean indicate if IOU has been closed 
  private boolean closed; 
  // Object that I owe you 
  private Object objectIou; 
   
  public RealIouEscrow() 
  { 
    this.callbacks = new Vector(); 
    this.closed = false; 
  } 
   
  public Iou issueIou() 
  { 
    // 直接返回对象本身,因为已经实现了 Iou 接口 
    return this; 
  } 
   
  public synchronized void addCallback(Callback cb) 
  { 
    if( this.closed ) 
    { 
      // 若已经被终止,则直接回调 
      cb.callback(this.objectIou); 
    } 
    else 
    { 
      // 否则,将回调对象加入列表 
      this.callbacks.add(cb); 
    } 
  } 
   
  public synchronized void removeCallback(Callback cb) 
  { 
    // 将回调对象从列表中删除 
    this.callbacks.remove(cb); 
  } 
   
  public synchronized boolean closed() 
  { 
    return this.closed; 
  } 
   
  public synchronized Object redeem() 
  { 
    if( !this.closed ) 
    { 
      // 如果尚未被终止,保持等待 
      standBy(); 
    } 
    return this.objectIou; 
  } 
   
  public synchronized void standBy() 
  { 
    if( !this.closed ) 
    { 
      try 
      { 
        wait(); 
      } 
      catch (InterruptedException e) 
      { 
      } 
    } 
  } 
   
  public synchronized void close(Object o) 
  { 
    if( !this.closed ) 
    { 
      // 首先设置结果对象 
      this.objectIou = o; 
      // 然后设置终止标志位 
      this.closed = true; 
      // 接着唤醒等待线程 
      this.notifyAll(); 
      // 最后驱动回调者执行回调方法 
      Iterator it = this.callbacks.iterator(); 
      while(it.hasNext()) 
      { 
        Callback callback = (Callback)it.next(); 
        callback.callback(this.objectIou); 
      } 
    } 
  } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:IOU 设计模式 介绍

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接