设计模式读书笔记-责任链模式

2016-08-21
读书笔记
  • 定义:一个请求,依次交给多个对象去处理,若对象A无法处理,则交给下一下对象B处理,若B无法处理,则交给下一个对象C处理。
  • 在父夫子的父类中定义方法:如果本对象无法处理某项请求,则交给下一个对象处理。
  • 而处理请求的对象的顺序在client中实时定义。
  • 代码:
public interface WomenInterface {
    public int getType();//获得个人状况
    public String getRequest();//获得个人请示,要干什么?逛街?约会?还是看电影
}

public class Women implements WomenInterface{

    private int type=0;//1未出嫁        2出嫁        3夫死
    private String request = "";

    public Women(int type,String request){
        this.type = type;
        switch(type){//为了显示好看点,我在这里做了点处理
            case 1:
                this.request = "女儿的请求是:" + request;
                break;
            case 2:
                this.request = "妻子的请求是:" + request;
                break;
            case 3:
                this.request = "母亲的请求是:" + request;
        }
    }

    public int getType() {
        return type;
    }

    public String getRequest() {
        return request;
    }
}



public abstract class Handler {//是father、husband、son的父类

    private int level =0; //能处理的级别
    private Handler nextHanlder;//责任传递,下一个人责任人是谁


    public Handler(int level){//每个类都要说明一下自己能处理哪些请求
        this.level = level;
    }

    public final void HandleMessage(WomenInterface women){
        if(women.getType() == this.level){
            this.response(women);
        }else{
            if(this.nextHanlder != null){ //有后续环节,才把请求往后递送
                this.nextHanlder.HandleMessage(women);
            }else{ //已经没有后续处理人了,不用处理了
                System.out.println("-----------没地方请示了,不做处理!\n");
            }
        }
    }

    public void setNext(Handler handler){
        this.nextHanlder = handler;
    }

    public abstract void response(WomenInterface women);//有请示那当然要回应

}



public class Father extends Handler{

    public Father(){//父亲只处理女儿的请求
        super(1);
    }

    public void response(WomenInterface women) {//父亲的答复
        System.out.println("--------女儿向父亲请示-------");
        System.out.println(women.getRequest());
        System.out.println("父亲的答复是:同意\n");
    }
}



public class Husband extends Handler{
    public Husband(){//丈夫只处理妻子的请求
        super(2);
    }

    public void response(WomenInterface women) {//丈夫请示的答复
        System.out.println("--------妻子向丈夫请示-------");
        System.out.println(women.getRequest());
        System.out.println("丈夫的答复是:同意\n");
    }
}



public class Son extends Handler{
    public Son(){//儿子只处理母亲的请求
        super(3);
    }

    public void response(WomenInterface women) {//儿子的答复
        System.out.println("--------母亲向儿子请示-------");
        System.out.println(women.getRequest());
        System.out.println("儿子的答复是:同意\n");
    }
}



public class Client {

    public static void main(String[] args) {
        //随机挑选几个女性
        Random rand = new Random();
        List<WomenInterface> arrayList = new ArrayList<WomenInterface>();
        for(int i=0;i<5;i++){
            arrayList.add(new Women(rand.nextInt(4),"我要出去逛街"));
        }

        //定义三个请示对象
        Handler father = new Father();
        Handler husband = new Husband();
        Handler son = new Son();


        //设置请示顺序
        father.setNext(husband);
        husband.setNext(son);
        for(WomenInterface women:arrayList){
            father.HandleMessage(women);
        }
    }
}

Kommentare: