看Chain of Responsibility模式后得疑问

    
henry.t 03-01-17

public interface Handler{
  public void handleRequest(Request request);
}
那么Handler实现代码如下:
public class ConcreteHandler implements Handler{
  private Handler successor;

  public ConcreteHandler(Handler successor){
    this.successor=successor;
  }

  public void handleRequest(Request request){
    if (request instanceof HelpRequest){
      //这里是处理Help的具体代码
    }else if (request instanceof PrintRequst){
      request.execute();
    }else
      //传递到下一个
      successor.handle(request);//疑问之处

    }
  }
}
Handler接口中没有handle(request)这个方法啊,请明示;
ConcreteHandler是Handler接口的实现,它自己有个私有成员,也是Handler的实现:private Handler successor;它也是ConcreteHandler吗?如果是,那么是不是下一个处理request的“节点”呢?请回答,谢谢!

banq
2003-01-17 09:09

其实这不是个很好的职责链,而是Command模式的变形。


Handler中定义是明显的Command模式,然后在Concrete类中做传递,实际应该在Handler里面做传递,因为这个传递是每个Conncrete都要执行的,当然handler要变成抽象类。

henry.t
2003-01-17 10:37

bang.看了你的回答,非常同意
其实这不是个很好的职责链,而是Command模式的变形。
但后面的话恕本人不才,不是很理解,而且我上面的疑问没有解决,请再详细回答,最好直接回答我的问题,以例子解释,帮助我提高,谢谢

banq
2003-01-17 18:09

successor就是下一个handle,在successor又有一个指向下一个的方法。

henry.t
2003-01-18 18:32

那我写一个此模式的应用,看看我理解得对不对,请指点:
public fristHandler implements Handler
{
private Handler successor;

  public fristHandler (Handler successor){
    this.successor=successor;
  }

  public void handleRequest(Request request){
    if (request instanceof HelpRequest){
……help……
    }else if (request instanceof fristRequst){
      request.execute();
    }else
      //传递到下一个
      successor.handle(request);//下一个
    }
  }

public void handle(Request request){
handleRequest(request);
}
}
////////////////////////////////////
public secondHandler implements Handler
{

private Handler successor;

  public secondHandler (Handler successor){
    this.successor=successor;
  }

  public void handleRequest(Request request){
    if (request instanceof HelpRequest){
……help……
    }else if (request instanceof secondRequst){
      request.execute();
    }else
      //传递到下一个
      successor.handle(request);//下一个
    }
  }

public void handle(Request request){
handleRequest(request);
}

}
////////////////////////////////////
public thirdHandler implements Handler
{
  public thirdHandler (){}

  public void handleRequest(Request request){
    if (request instanceof HelpRequest){
……help……
    }else if (request instanceof thirdRequst){
      request.execute();
    }else
      return;
    }
  }

public void handle(Request request){
handleRequest(request);
}

}

public void main(……)
{
thirdHandler third = new thirdHandler();
secondHandler second = new secondHandler( third );
fristHandler frist = new fristHandler ( second );
frist.handle(request);
}

对不对?如果对,请说明不足之处,如果不对,请纠正。请详细点,几句话说不清楚,谢谢了。

2Go 1 2 下一页