博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式_责任链模式
阅读量:4653 次
发布时间:2019-06-09

本文共 3103 字,大约阅读时间需要 10 分钟。

定义
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.(使多个对象都有机会处理请求。从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止)
不认识的单词
coupling : 耦合
sender : 发送者

责任链模式的重点是在“链”上。由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回对应的结果,其通用类图如图16-4所看到的。

责任链模式的核心在“链”上!

 

样例
    中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父、既嫁从夫、夫
死从子”。也就是说,一位女性在结婚之前要听从于父亲。结婚之后要听从于丈夫,假设丈 
夫死了还要听从于儿子。举例来说,假设一位女性要出去逛街,在她出嫁前必须征得父亲的
允许。出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?那就得问问儿子是否允许自己出
去逛街。

最核心的东西★

public abstract class Handler { public final static int FATHER=1; public final static int HUSBAND=2; public final static int SON=3; private int level=0; private Handler nextHandler;  //这是重点 public Handler(int _level){  this.level=_level; }   public final void HandlerMessage(IWomen women){  if(women.getType()==this.level){	   this.response(women);  }else{   if(this.nextHandler != null){    this.nextHandler.HandlerMessage(women);   }else{    System.out.println("没有兴许。就是不允许");   }  } }  public void setNext(Handler _nextHandler){  this.nextHandler=_nextHandler;   }  protected abstract void response(IWomen women);}
分析Handler类
抽象类,内部三个静态常量,一个当前等级变量。一个自身成员。姑且让我这么说,这样就能够递归调用。将Handler子类串起来。形成一条链。
以下的东西是修修补补,全然按照上面约束而进行。

三个子类

public class Father extends Handler { public Father() {  super(Handler.FATHER); } @Override protected void response(IWomen women) {  System.out.println("女儿向父亲请示:"+women.getRequest());  System.out.println("父亲答应"); }}
public class Husband extends Handler{ public Husband() {  super(Handler.HUSBAND); } @Override protected void response(IWomen women) {  System.out.println("妻子的请示:"+women.getRequest());  System.out.println("丈夫准许了"); }}
public class Son extends Handler { public Son() {  super(Handler.SON); } @Override protected void response(IWomen women) {  System.out.println("母亲的请示是"+women.getRequest());  System.out.println("儿子准许了"); }}
再来设计女性接口和实例

public interface IWomen { public int getType(); public String getRequest();}
public class Women implements IWomen { /* 0:未出嫁  * 1:已出嫁  * 2:丧夫  */ private int type=0; private String request="";  public Women(int type,String request){   this.type=type;  this.request=request; }  public String getRequest() {  return this.request; } public int getType() {  return this.type; }}
測试

public class Client { public static void main(String[] args) {  Random random=new  Random();  ArrayList
list=new ArrayList
(); for(int i=0;i<5;i++){ list.add(new Women(random.nextInt(4),"我要出去逛街")); //产生随机的类型 } Handler father=new Father(); Handler husband=new Husband(); Handler son=new Son(); father.setNext(husband); //设置下一个 husband.setNext(son); //设置下一个 for(IWomen women:list){ father.HandlerMessage(women); //当然从最高開始 } }}/** * 重要是"链",由一条链去处理类似的请求在链中决定谁来处理这个请求 */

悟 

这个设计模式一个最大的特点就是setNext()方法。能够往后传递从而实现递归一样的循环,假设这个不行,那就给下一个。链式结构的遍历。 "链",类似于if-else。显然这个设计的更高级,更工整。假设要说扩展性的话,那么还行吧。毕竟一个系统不可能有非常长的责任链吧。能够和其它模式联合使用,关键还是场景,需求的问题。

我是菜鸟,我在路上。

转载于:https://www.cnblogs.com/gccbuaa/p/6786393.html

你可能感兴趣的文章
ssm资源配置
查看>>
斗鱼爬虫,爬取颜值频道的主播图片和名字
查看>>
【Codeforces Round #439 (Div. 2) B】The Eternal Immortality
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 B】 Lazy Security Guard
查看>>
【codeforces 499C】Crazy Town
查看>>
【Uva 12105】Bigger is Better
查看>>
【47.40%】【codeforces 743B】Chloe and the sequence
查看>>
好用的jq复制插件clipboard.js
查看>>
linux共享库,以及/etc/ld.so.conf文件的应用【转】
查看>>
Python 爬虫(1)基础知识和简单爬虫
查看>>
[经验] Unity3D 里怎么制作天空盒(skybox)
查看>>
ViewPager和View组合 实现页面的切换
查看>>
使用PagerSlidingTabStrip实现顶部导航栏
查看>>
调用摄像头和相册
查看>>
jQuery.事件对象
查看>>
CSS之属相相关
查看>>
整理了一下自己买过的计算机书
查看>>
解决py2exe error: MSVCP90.dll: No such file or directory
查看>>
java RSA实现私钥签名、公钥验签、私钥加密数据、公钥解密数据
查看>>
Erlang 练习题
查看>>