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

IOU 设计模式介绍及应用

 2010-03-15 00:00:00 来源:WEB开发网   
核心提示: 涉及的异步服务类是 AsyncService,它以异步方式处理 Processable 对象并调用其 process 方法,IOU 设计模式介绍及应用(7),并且最后会终止 Escrow 对象以结束 Iou 债务,实例中的 AsyncService 是以后台线程为载体,剩下的则必须一件一件地进行

涉及的异步服务类是 AsyncService,它以异步方式处理 Processable 对象并调用其 process 方法,并且最后会终止 Escrow 对象以结束 Iou 债务。实例中的 AsyncService 是以后台线程为载体,但是实际应用中用户可以选择任意的异步机制。

最后的女管家类是 HouseKeeper。她需要进行的家务包括洗衣、做饭及其他,其中可以并行执行是洗衣和做饭,因为有洗衣机和电饭煲可以帮忙,剩下的则必须一件一件地进行。具体实现见清单 10。

清单 10. HouseKeeper 类

public class HouseKeeper 
{ 
  public static void main(String args[]) 
  { 
    // 初始化待处理的衣服和食物对象 
    Clothes clothesToWash = new ClothesImpl(); 
    Food foodToCook = new FoodImpl(); 
     
    // 设定洗衣事务 
    Iou iou = wash(clothesToWash); 
    // 继续做其他事情 
    doSomethingOther(); 
    // 设定烹饪事务 
    Food foodCooked = cook(foodToCook); 
    // 继续做其他事情 
    doSomethingOther(); 
    // 开始享用食物 
    eat(foodCooked); 
    // 开始晾晒衣服 
    hangout(iou); 
  } 
   
  private static Iou wash(Clothes clothes) 
  { 
    logger("Schedule a task to wash " + clothes); 
    // 构造 Escrow 对象 
    Escrow escrow = new RealIouEscrow(); 
    // 启动后台洗衣服务 
    AsyncService service = new AsyncService("wash clothes", clothes, escrow); 
    service.start(); 
    // 随即通过 Escrow 对象发行一个传统的 Iou 
    return escrow.issueIou(); 
  } 
   
  private static Food cook(Food food) 
  { 
    logger("Schedule a task to cook " + food); 
    // 构造扩展 Escrow 对象,并关联 Food 接口类型 
    Escrow escrow = new RealIouEscrowEx(Food.class); 
    // 启动后台烹饪服务 
    AsyncService service = new AsyncService("cook food", food, escrow); 
    service.start(); 
    // 随即通过扩展 Escrow 对象发行一个扩展 Iou 
    // 它可以被安全地类型装换到 Food 类型 
    return (Food)escrow.issueIou(); 
  } 
   
  private static void eat(Food food) 
  { 
    logger("Be about to eat food...add some spice first..."); 
    // 演示在扩展 Iou 对象上执行方法(效果等价于在真实结果上调用该方法) 
    food.addSpice(); 
    logger(food + " is eaten."); 
  } 
   
  private static void hangout(Iou iou) 
  { 
    logger("Be about to hang out clothes..."); 
    // 演示在传统 Iou 对象上的检查、等待并赎回结果 
    if( !iou.closed() ) 
    { 
      logger("Clothes are not ready, stand by..."); 
      iou.standBy(); 
    } 
    Object clothes = iou.redeem(); 
    logger(clothes + " are hung out."); 
  } 
   
  …… 
} 

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

Tags:IOU 设计模式 介绍

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