China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

    package com.cbf4life.common;
/**
* 古代悲哀女性的总称
*/
public interface IWomen {
//获得个人状况
public int getType();
//获得个人请示,你要干什么?出去逛街?约会?还是看电影
public String getRequest();
}
//女性就两个参数,一个是当前的个人状况,是结婚了呢还是没结婚,丈夫有没有去世,另外一个是要
//请示的内容,要出去逛街呀还是吃饭
package com.cbf4life.common;
public class Women implements IWomen{
/*
* 通过一个int类型的参数来描述妇女的个人状况
* 1---未出嫁
* 2---出嫁
* 3---夫死
*/
private int type=0;

private String request = "";

public Women(int _type,String _request){
this.type = _type;
this.request = _request;
}

public int getType(){
return this.type;
}

public String getRequest(){
return this.request;
}
}

package com.cbf4life.common;
/**
* 父系社会,那就是男性有至高权利,handler控制权
*/

public interface IHandler {
//一个女性(女儿,妻子或者是母亲)要求逛街,你要处理这个请求
public void HandleMessage(IWomen women);
}
//父亲、丈夫、儿子都是这个IHandler 接口的实现者:
package com.cbf4life.common;

public class Father implements IHandler {
//未出嫁女儿来请示父亲
public void HandleMessage(IWomen women) {
System.out.println("女儿的请示是:"+women.getRequest());
System.out.println("父亲的答复是:同意");
}
}
package com.cbf4life.common;
public class Husband implements IHandler {
//妻子向丈夫请示
public void HandleMessage(IWomen women) {
System.out.println("妻子的请示是:"+women.getRequest());
System.out.println("丈夫的答复是:同意");
}
}

package com.cbf4life.common;
public class Son implements IHandler {
public void HandleMessage(IWomen women) {
System.out.println("母亲的请示是:"+women.getRequest());
System.out.println("儿子的答复是:同意");
}
}

package com.cbf4life.common;
import java.util.ArrayList;
import java.util.Random;

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

//定义三个请示对象
IHandler father = new Father();
IHandler husband = new Husband();
IHandler son = new Son(); for(IWomen women:arrayList){
if(women.getType() ==1){
System.out.println("\n--------女儿向父亲请示-------");
father.HandleMessage(women);
}else if(women.getType() ==2){
System.out.println("\n--------妻子向丈夫请示-------");
husband.HandleMessage(women);
}else if(women.getType() == 3){
System.out.println("\n--------母亲向儿子请示-------");
son.HandleMessage(women);
}else{
}
}
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.cbf4life.advance;
/**
* 父系社会,那就是男性有至高权利,handler控制权
*/
public abstract class Handler {
//能处理的级别
private int level =0;
//责任传递,下一个人责任人是谁
private Handler nextHanlder;
//每个类都要说明一下自己能处理哪些请求
public Handler(int _level){
this.level = _level;
}
//一个女性(女儿,妻子或者是母亲)要求逛街,你要处理这个请求
public final void HandleMessage(IWomen 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(IWomen women);
}//其实在这里也用到模版方法模式,在模版方法中判断请求的级别和当前能够处理的级别,
//如果相同则调用基本方法,做出反馈;如果不相等,则传递到下一个环节,由下一环节做出回应。基本方
//法response 要各个实现类都要实现,我们来看三个实现类:
package com.cbf4life.advance;

public class Father extends Handler {
//父亲只处理女儿的请求
public Father(){
super(1);
}
//父亲的答复
@Override
public void response(IWomen women) {
System.out.println("--------女儿向父亲请示-------");
System.out.println(women.getRequest());
System.out.println("父亲的答复是:同意\n");
}
}package com.cbf4life.advance;

public class Husband extends Handler {
//丈夫只处理妻子的请求
public Husband(){
super(2);
}
//丈夫请示的答复
@Override
public void response(IWomen women) {
System.out.println("--------妻子向丈夫请示-------");
System.out.println(women.getRequest());
System.out.println("丈夫的答复是:同意\n");
}
}
package com.cbf4life.advance;

public class Son extends Handler {
//儿子只处理母亲的请求
public Son(){
super(3);
}
//儿子的答复
public void response(IWomen women) {
System.out.println("--------母亲向儿子请示-------");
System.out.println(women.getRequest());
System.out.println("儿子的答复是:同意\n");
}
}
//通过构造方法我们设置了各个类能处理的请求类型,Father 只能处理请求类型为1(也就是女儿)的请求;Husband
//只能处理请求类型类2(也就是妻子)的请求;儿子只能处理请求类型为3(也就是目前)的请求。
package com.cbf4life.advance;
public class Women implements IWomen{
private int type=0;

private String request = "";

public Women(int _type,String _request){
this.type = _type;

switch(this.type){
case 1:
this.request = "女儿的请求是:" + _request;
break;
case 2:
this.request = "妻子的请求是:" + _request;
break;
case 3:
this.request = "母亲的请求是:" + _request;
}
}

public int getType(){
return this.type;
}

public String getRequest(){
return this.request;
}
}

package com.cbf4life.advance;
import java.util.ArrayList;
import java.util.Random;
/**
* 我们后人来看这样的社会道德
*/
@SuppressWarnings("all")
public class Client {
public static void main(String[] args) {

Random rand = new Random();
ArrayList<IWomen> arrayList = new ArrayList();
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(IWomen women:arrayList){
father.HandleMessage(women);
}
}
}