1.定义
使多个对象都有机会处理请求,从而避免了请求对象与处理对象之间的耦合关系。将这些对象形成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
2.个人理解
处理请求的对象是拥有共同接口的链表(《数据结构》),并且往往有先后处理的顺序。将一个要求处理的请求发送给最低的处理对象,如果这个处理对象不能完成,则逐渐传递,直到有一个处理对象处理为止。
3.结构图
4.实现
package responsebility;
class Request {
private int no;
private double amount;
public Request(int no,double amount){
this.no=no;
this.amount=amount;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public double getAmount() {
return amount;
}
public void setamount(double amount) {
this.amount = amount;
}
}
abstract class Approver {
protected Approver succeesor;
private String name;
protected Approver(String name){
this.name=name;
}
abstract void HandlRequest(Request request);
public Approver getApprover() {
return succeesor;
}
public void setApprover(Approver succeesor) {
this.succeesor = succeesor;
}
}
class Client extends Approver {
public Client(String name){
super(name);
}
public void HandlRequest(Request request) {
if(request.getAmount()<1000){
System.out.println("Client handle the request "+request.getNo()+",its amount is "+request.getAmount());
}else{
if(this.succeesor!=null){
this.succeesor.HandlRequest(request);
}
}
}
}
class Manager extends Approver {
public Manager(String name){
super(name);
}
public void HandlRequest(Request request) {
if(request.getAmount()<10000){
System.out.println("Manager handle the request "+request.getNo()+",its amount is "+request.getAmount());
}else{
System.out.println("Let's vote to handle the request "+request.getNo()+",its amount is "+request.getAmount());
}
}
}
public class ResponsebilityApp {
/**
* @param args
*/
public static void main(String[] args) {
Client client=new Client("xp");
Manager manager=new Manager("Bob");
client.setApprover(manager);
Request request=new Request(1,230000);
Request request2=new Request(2,20);
client.HandlRequest(request);
client.HandlRequest(request2);
}
}