“三从四德”--古代妇女的枷锁
代码
IWomen
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public interface IWomen {
// 获得个人的状况
public int getType();
// 获得个人请示
public String getRequest();
}
Women
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Women implements IWomen {
// 妇女个人状况
private int type = 0;
// 妇女的请示
private String request = "";
public Women(int type, String request) {
super();
this.type = type;
this.request = request;
}
/*
* 1-未出嫁 2-出嫁 3-夫死
*/
@Override
public int getType() {
return this.type;
}
@Override
public String getRequest() {
return this.request;
}
}
IBandler
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public interface IHandler {
// 女性的要求,处理函数
public void HandleMessage(IWomen iwomen);
}
Father
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Father implements IHandler {
@Override
public void HandleMessage(IWomen iwomen) {
// 女子的请示
System.out.println("女子向父亲请示:" + iwomen.getRequest());
// 父亲的答复是同意
System.out.println("父亲的答复是:同意!");
}
}
Hasband
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Husband implements IHandler {
@Override
public void HandleMessage(IWomen iwomen) {
// 女子的请示
System.out.println("女子向丈夫请示:" + iwomen.getRequest());
// 父亲的答复是同意
System.out.println("丈夫的答复是:同意!");
}
}
Son
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Son implements IHandler {
@Override
public void HandleMessage(IWomen iwomen) {
// 女子的请示
System.out.println("女子向儿子请示:" + iwomen.getRequest());
// 父亲的答复是同意
System.out.println("儿子的答复是:同意!");
}
}
Client
package com.peng.zrl;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.Future;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Client {
public static void main(String[] args) {
// 随机挑选几个女性
Random random = new Random();
ArrayList lists = new ArrayList();
for (int i = 0; i < 10; i++) {
lists.add(new Women(random.nextInt(3) + 1, "我要去逛街!!"));
}
// 定义三个请示对象
Father man1 = new Father();
Husband man2 = new Husband();
Son man3 = new Son();
// 逛街请示
for (IWomen iWomen : lists) {
if (iWomen.getType() == 1) {// 向父亲请示
man1.HandleMessage(iWomen);
} else if (iWomen.getType() == 2) {// 向丈夫请示
man2.HandleMessage(iWomen);
} else if (iWomen.getType() == 3) {// 向儿子请示
man3.HandleMessage(iWomen);
}
}
}
}
女子向儿子请示:我要去逛街!!
儿子的答复是:同意!
女子向丈夫请示:我要去逛街!!
丈夫的答复是:同意!
女子向父亲请示:我要去逛街!!
父亲的答复是:同意!
女子向儿子请示:我要去逛街!!
儿子的答复是:同意!
女子向丈夫请示:我要去逛街!!
丈夫的答复是:同意!
女子向父亲请示:我要去逛街!!
父亲的答复是:同意!
女子向父亲请示:我要去逛街!!
父亲的答复是:同意!
女子向丈夫请示:我要去逛街!!
丈夫的答复是:同意!
女子向父亲请示:我要去逛街!!
父亲的答复是:同意!
女子向父亲请示:我要去逛街!!
父亲的答复是:同意!
有了问题那就解决吧--请示出去,答复是唯一的。过程如下
代码
IWomen
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public interface IWomen {
// 获得个人的状况
public int getType();
// 获得个人请示
public String getRequest();
}
Women
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Women implements IWomen {
// 妇女个人状况
private int type = 0;
// 妇女的请示
private String request = "";
public Women(int type, String request) {
super();
this.type = type;
// 为了便于显示,这里做了处理
switch (this.type) {
case 1:
this.request = "女儿的请求:" + request;
break;
case 2:
this.request = "妻子的请求:" + request;
break;
case 3:
this.request = "母亲的请求:" + request;
break;
}
}
/*
* 1-未出嫁 2-出嫁 3-夫死
*/
@Override
public int getType() {
return this.type;
}
@Override
public String getRequest() {
return this.request;
}
}
Handler
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public abstract class Handler {
public final static int FATHER_LEVEL_REQUEST = 1;
public final static int HUSBAND_LEVEL_REQUEST = 2;
public final static int SON_LEVEL_REQUEST = 3;
// 能处理的级别
private int level = 0;
// 责任传递,下一个责任人是谁
private Handler nextHandler;
// 自己能处理那些请求
public Handler(int level) {
this.level = level;
}
// 女性的要求,处理函数
public final void HandleMessage(IWomen iwomen) {
if (iwomen.getType() == this.level) {
this.response(iwomen);// 自己处理请求
} else {
if (this.nextHandler != null) {
// 交给下一个处理者
this.nextHandler.HandleMessage(iwomen);
} else {
// 没后续人处理了,不用处理了
System.out.println("~~~~~~。。没地方请示,你自己决定吧!");
}
}
}
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
// 有请示,回应
protected abstract void response(IWomen iwomen);
}
Father
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Father extends Handler {
public Father() {
super(Handler.FATHER_LEVEL_REQUEST);
}
@Override
protected void response(IWomen iwomen) {
System.out.println("女儿向父亲请示:");
System.out.println(iwomen.getRequest());
System.out.println("父亲的回答是:同意!");
}
}
Husband
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Husband extends Handler {
public Husband() {
super(Handler.HUSBAND_LEVEL_REQUEST);
}
@Override
protected void response(IWomen iwomen) {
System.out.println("妻子向丈夫请示:");
System.out.println(iwomen.getRequest());
System.out.println("丈夫的回答是:同意!");
}
}
Son
package com.peng.zrl;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Son extends Handler {
public Son() {
super(Handler.SON_LEVEL_REQUEST);
}
@Override
protected void response(IWomen iwomen) {
System.out.println("母亲向儿子请示:");
System.out.println(iwomen.getRequest());
System.out.println("儿子的回答是:同意!");
}
}
Client
package com.peng.zrl;
import java.util.ArrayList;
import java.util.Random;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Client {
public static void main(String[] args) {
// 随机挑选几个女性
Random random = new Random();
ArrayList lists = new ArrayList();
for (int i = 0; i < 10; i++) {
lists.add(new Women(random.nextInt(4) + 1, "我要去逛街!!"));// 注意这里的随机数为[1,4]之间的整数,1,2,3可处理,4将自由处理
}
// 定义三个请示对象
Father man1 = new Father();
Husband man2 = new Husband();
Son man3 = new Son();
// 设置请示顺序
man1.setNextHandler(man2);
man2.setNextHandler(man3);
// 遍历
for (IWomen iWomen : lists) {
man1.HandleMessage(iWomen);
System.out.println("_____________________");
System.out.println("————————歇一会儿———————");
System.out.println("_____________________");
}
}
}
妻子向丈夫请示:
妻子的请求:我要去逛街!!
丈夫的回答是:同意!
_____________________
————————歇一会儿———————
_____________________
~~~~~~。。没地方请示,你自己决定吧!
_____________________
————————歇一会儿———————
_____________________
母亲向儿子请示:
母亲的请求:我要去逛街!!
儿子的回答是:同意!
_____________________
————————歇一会儿———————
_____________________
~~~~~~。。没地方请示,你自己决定吧!
_____________________
————————歇一会儿———————
_____________________
母亲向儿子请示:
母亲的请求:我要去逛街!!
儿子的回答是:同意!
_____________________
————————歇一会儿———————
_____________________
~~~~~~。。没地方请示,你自己决定吧!
_____________________
————————歇一会儿———————
_____________________
~~~~~~。。没地方请示,你自己决定吧!
_____________________
————————歇一会儿———————
_____________________
妻子向丈夫请示:
妻子的请求:我要去逛街!!
丈夫的回答是:同意!
_____________________
————————歇一会儿———————
_____________________
~~~~~~。。没地方请示,你自己决定吧!
_____________________
————————歇一会儿———————
_____________________
妻子向丈夫请示:
妻子的请求:我要去逛街!!
丈夫的回答是:同意!
_____________________
————————歇一会儿———————
_____________________
代码
Handler
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public abstract class Handler {
private Handler nextHandler;
// 每个处理者必须对请求做出处理
public final Response handleMessage(Request request) {
Response response = null;
// 判断自己的处理级别
if (this.getHandlerLevel().equals(request.getRequestLevel())) {// 级别相同
response = this.echo(request);
} else {// 级别不同,进行传递
// 判断是否有下一个传递者
if (null != this.nextHandler) {// 有下一个对象
response = this.nextHandler.echo(request);
} else {// 没有下一个对象,结束传递
// 没有适当的处理者,自行处理
}
}
return response;
}
// 设置下一个处理者
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
protected abstract Response echo(Request request);
// 处理级别
public abstract Level getHandlerLevel();
}
ConcreteHandler1
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class ConcreteHandler1 extends Handler {
//定义自己的处理逻辑
@Override
protected Response echo(Request request) {
return null;
}
//定义自己的 处理级别
@Override
public Level getHandlerLevel() {
return null;
}
}
ConcreteHandler2
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class ConcreteHandler2 extends Handler {
//定义自己的处理逻辑
@Override
protected Response echo(Request request) {
return null;
}
//定义自己的 处理级别
@Override
public Level getHandlerLevel() {
return null;
}
}
ConcreteHandler3
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class ConcreteHandler3 extends Handler {
//定义自己的处理逻辑
@Override
protected Response echo(Request request) {
return null;
}
//定义自己的 处理级别
@Override
public Level getHandlerLevel() {
return null;
}
}
Level
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Level {
// 请求级别
}
Request
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Request {
// 请求的等级
public Level getRequestLevel() {
return null;
}
}
Response
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Response {
// 处理者返回的数据
}
Client
package zrl2;
/**
* @author kungfu~peng
* @data 2017年11月21日
* @description
*/
public class Client {
public static void main(String[] args) {
// 声明所有的处理节点
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
// 设置链的顺序
h1.setNextHandler(h2);
h2.setNextHandler(h3);
// 提交请求,返回结果
Response response = h1.handleMessage(new Request());
}
}