java设计模式之责任链模式
2017-03-17 10:04
218 查看
责任链模式小记
中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父、既嫁从夫、夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女的要出去逛街,同样这样的一个请求,在她没有出嫁前她必须征得父亲的同意,出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?一般都是男的比女的死的早,还要问问儿子是否允许自己出去逛街,估计你下边马上要问要是没有儿子怎么办?
既然有这么多的问题,那我们要想办法来解决这些问题,我们可以抽象成这样一个结构,女性的请求先发送到父亲类,父亲类一看是自己要处理的,就回应处理,如果女儿已经出嫁了,那就要把这个请求转发到女婿来处理,那女婿一旦去天国报道了,那就由儿子来处理这个请求,类似于这样请求:这里写链接内容
父亲、丈夫、儿子每个节点有两个选择:要么承担责任,做出回复;要么把请求转发到后序环节。结构分析的已经很清楚了,那我们看怎么来实现这个功能,先看类图:
这里写链接内容
我们使用数字来代表女性的不同状态,1是未结婚,2是已经结婚的,而且丈夫建在,3是丈夫去世了的
从类图上看,三个实现类Father、Husband、Son只要实现构造函数和父类的中抽象方法就可以了,具体怎么处理这些请求,都已经转移到了Hanlder抽象类中,我们来看Hanlder怎么实现:
有没有看到,其实在这里也用到模版方法模式,在模版方法中判断请求的级别和当前能够处理的级别,如果相同则调用基本方法,做出反馈;如果不相等,则传递到下一个环节,由下一环节做出回应。基本方法response要各个实现类都要实现,我们来看三个实现类:
“`/**
*
* 父亲
*/
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”);
}
}
/**
*
* 丈夫类
*/
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”);
}
}
/**
*
* 儿子类
*/
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”);
}
}
*
* 古代悲哀女性的总称
*/
public interface IWomen {
//获得个人状况
public int getType();
//获得个人请示,你要干什么?出去逛街?约会?还是看电影
public String getRequest();
}“`
Woman类:
中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父、既嫁从夫、夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女的要出去逛街,同样这样的一个请求,在她没有出嫁前她必须征得父亲的同意,出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?一般都是男的比女的死的早,还要问问儿子是否允许自己出去逛街,估计你下边马上要问要是没有儿子怎么办?
既然有这么多的问题,那我们要想办法来解决这些问题,我们可以抽象成这样一个结构,女性的请求先发送到父亲类,父亲类一看是自己要处理的,就回应处理,如果女儿已经出嫁了,那就要把这个请求转发到女婿来处理,那女婿一旦去天国报道了,那就由儿子来处理这个请求,类似于这样请求:这里写链接内容
父亲、丈夫、儿子每个节点有两个选择:要么承担责任,做出回复;要么把请求转发到后序环节。结构分析的已经很清楚了,那我们看怎么来实现这个功能,先看类图:
这里写链接内容
我们使用数字来代表女性的不同状态,1是未结婚,2是已经结婚的,而且丈夫建在,3是丈夫去世了的
从类图上看,三个实现类Father、Husband、Son只要实现构造函数和父类的中抽象方法就可以了,具体怎么处理这些请求,都已经转移到了Hanlder抽象类中,我们来看Hanlder怎么实现:
/** * * * 父系社会,那就是男性有至高权利,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要各个实现类都要实现,我们来看三个实现类:
“`/**
*
* 父亲
*/
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”);
}
}
/**
*
* 丈夫类
*/
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”);
}
}
/**
*
* 儿子类
*/
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(也就是目前)的请求。 IWomen/**
*
* 古代悲哀女性的总称
*/
public interface IWomen {
//获得个人状况
public int getType();
//获得个人请示,你要干什么?出去逛街?约会?还是看电影
public String getRequest();
}“`
Woman类:
相关文章推荐
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- JAVA系列-设计模式-责任链模式
- java-设计模式(行为型)-【责任链模式】
- Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response
- Java 设计模式之责任链模式
- 设计模式(十三)----- 责任链模式(Chain of Responsibility)----(JAVA版)
- Java设计模式(14)责任链模式(Chain of Responsibility模式)
- 浅谈JAVA设计模式之——责任链模式(COR)
- Java设计模式透析之 ——责任链模式(Responsibility)
- Java-马士兵设计模式学习笔记-责任链模式-FilterChain功能
- Java设计模式笔记之责任链模式
- JAVA设计模式-责任链模式
- java设计模式17——责任链模式(Chain of Responsibility)
- JAVA设计模式(13):行为型-责任链模式(Responsibility)
- java设计模式-责任链模式(Chain Of Resposibility)
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- Java设计模式之责任链模式简介
- Java设计模式菜鸟系列(十八)责任链模式建模与实现
- JAVA设计模式学习20——责任链模式
- Java设计模式-责任链模式(Chain of Responsibility)