- 定义:一个请求,依次交给多个对象去处理,若对象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);
}
}
}