设计模式系列16

编程入门 行业动态 更新时间:2024-10-10 06:18:44

设计<a href=https://www.elefans.com/category/jswz/34/1771241.html style=模式系列16"/>

设计模式系列16

所谓责任落实到位,落实到人,就是要找对特定事情有处理权限的人。

我们以法院为例子,小事情就在基层人民法院处理了,大一点的事情就找地市级的中级法院,如果事情闹大的就省级的高级人民法院,如果这事件特别重大,那就是最高人民法院了。

所以我们看下四个级别:

 最高人民法院 > 高级人民法院  > 中级人民法院 > 基层人民法院

那么问题来了,当年窦娥冤情换成现在是归谁管呢?可以跳级跑去告御状吗?


代码实现

现在我们先抽象出一个案例的基本元素。

public interface ICase {public int getLevel();public String getRequest();
}

我们的案子有冤情级别,和冤情内容。

接着我们来写我们的窦氏。

public class DouWomen implements ICase {private int level; //案情级别private String request;//案情内容public DouWomen(int level, String request) {this.level = level;this.request = request;}@Overridepublic int getLevel() {return level;}@Overridepublic String getRequest() {return request;}
}

我们的窦氏是一个背负了案子的女人,所有实现了这个案子Icase接口。

接着我们来看下我们的法院基本情况

public abstract class Court {protected static final int LOCAL_LEVEL = 1;protected static final int MID_LEVEL = 2;protected static final int HIGH_LEVEL = 3;protected static final int TOP_LEVEL = 4;private int level = 0;private Court nextCourt;public Court(int level) {this.level = level;}public final void HandleMessage(ICase iCase) {if (iCase.getLevel() == this.level) {this.response(iCase);} else {if (this.nextCourt != null) {this.nextCourt.HandleMessage(iCase);} else {System.out.println("六月飞雪");}}}public void setNextCourt(Court _handler) {this.nextCourt = _handler;}public abstract void response(ICase iCase);}

我们的法院有处理的级别,和如果超过当前级别对应的下一个更高级的nextCourt,如果超过最大级别,没人处理得了,那就只有六月飞雪了。

然后我们的基层法院

public class LocalCourt extends Court {public LocalCourt() {super(LOCAL_LEVEL);}@Overridepublic void response(ICase iCase) { System.out.print("基层法院:处理案情" + iCase.getRequest());}
}

接着是中级法院

public class MidCourt extends Court {public MidCourt() {super(MID_LEVEL);}@Overridepublic void response(ICase iCase) { System.out.print("中级法院:处理案情" + iCase.getRequest());}   
}

然后是高级

public class HighCourt extends Court {public HighCourt() {super(HIGH_LEVEL);}@Overridepublic void response(ICase iCase) {System.out.print("高级法院:处理案情" + iCase.getRequest());}
}

最后是终极

public class HighCourt extends Court {public HighCourt() {super(TOP_LEVEL);}@Overridepublic void response(ICase iCase) {System.out.print("最高人民法院:处理案情" + iCase.getRequest());}
}

有了这么长的铺垫,终于可以写审批了

public class Judgement {public static void main(String[] args) {DouWomen douWomen = new DouWomen(999, " 我好冤啊");Court localCourt = new LocalCourt();Court midCourt = new MidCourt();Court highCourt = new HighCourt();Court topCourt = new TopCourt();localCourt.setNextCourt(midCourt);midCourt.setNextCourt(highCourt);highCourt.setNextCourt(topCourt);topCourt.setNextCourt(null);localCourt.HandleMessage(douWomen);}
}   

我们的最终审批写好了,从本地的法院开始处理!
但我们知道最后没人处理得了,所有只有六月飞雪了。


类图

后记

在写服务器的时候,我们经常会写一些过滤的操作,其中就有责任链的影子。
我们的责任链的好处是减低了耦合度,一个对象无需要关心到底接下来给谁,只需要专心处理自己的事情就好了。
不过有个问题,就是不能保证我们的请求被处理,例如我们的窦娥。
另外,责任链调试不是很方便。

更多推荐

设计模式系列16

本文发布于:2024-03-11 21:35:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729950.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模式   系列

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!