现在的位置: 首页 > 综合 > 正文

职责链模式

2013年03月17日 ⁄ 综合 ⁄ 共 2020字 ⁄ 字号 评论关闭
职责链模式
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);

    }

}

抱歉!评论已关闭.