首页
学习
活动
专区
工具
TVP
发布

Java设计模式(十七)----责任链模式

二、引子 从击鼓谈起   击鼓是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓击鼓的地方与的地方是分开的,以示公正。...开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。   比如说,贾母、贾赦、贾政、贾宝玉和贾环是五个参加击鼓游戏的者,他们组成一个环链。...击鼓者将传给贾母,开始游戏。由贾母传给 贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又贾宝玉传给贾环,由贾环传回给贾母,如此往复,如下图所示。当鼓声停止时,手中有的人就得执行酒令。 ?...击鼓便是责任链模式的应用。责任链可能是一条直线、一个环链或者一个树结构的一部分。 三、结构  下面使用了一个责任链模式的最简单的实现。 ?   ...这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的 引用,抽象方法handleRequest()规范了子类处理请求的操作。

77190
您找到你想要的搜索结果了吗?
是的
没有找到

怒肝 JavaScript 数据结构 — 队列实战篇

如果不清楚基本概念,请参阅前面两篇文章: 怒肝 JavaScript 数据结构 — 队列篇 怒肝 JavaScript 数据结构 — 双端队列篇 击鼓游戏 队列经常被应用于生活和计算机当中,针对不同的实际情况...比如要说的这个击鼓游戏。这个游戏大家在上学的时候应该都玩过,班级里一个人在讲台上敲黑板,从第一排的同学开始向后传,当敲击黑板的声音停止,传到谁的手里,谁就要表演节目。...按照座位顺序的同学我们可以看作是一个队列,最终拿到的同学,我们认为是要出列的元素。每一轮花都要出列一人,剩余的同学再进行下一轮,直到最后剩一个人,这个人就是胜利者。...尝试结果 上面我们基于队列实现了一个击鼓的方法,现在试用一下: var students = ['赛罗','欧布','捷德','银河','泰迦','泽塔','维克特利'] var result =...回文检查器 上面击鼓游戏是队列的应用,回文检查器则是双端队列的应用。 回文是啥?其实很简单,就是正反都能读得通的词句。

23420

JavaScript数据结构03 - 队列

循环队列的一个例子就是击鼓游戏(Hot Potato)。在这个游戏中,孩子们围城一个圆圈,击鼓的时候把花尽快的传递给旁边的人。某一时刻击鼓停止,这时花在谁的手里,谁就退出圆圈直到游戏结束。...下面我们在普通队列的基础上,实现一个模拟的击鼓游戏: // 实现击鼓 function hotPotato (nameList, num) { var queue = new Queue()...); } // 循环num次过后,移除当前队首的元素 eliminated = queue.dequeue(); console.log(`${eliminated}在击鼓花中被淘汰...Carl"]; var winner = hotPotato(nameList, 10); console.log(`最后的胜利者是:${winner}`); 复制代码 执行结果为: // John在击鼓花中被淘汰...// Ingrid在击鼓花中被淘汰! // Jack在击鼓花中被淘汰! // Camila在击鼓花中被淘汰! // 最后的胜利者是:Carl 复制代码 三、结束

57310

TypeScript实现队列与双端队列

队列实现击鼓游戏 由于队列经常被应用在计算机领域和我们的现实生活中,就出现了一些队列的修改版本。 例如循环队列,我们通过实现一个击鼓游戏来理解循环队列。...游戏规则 击鼓游戏的规则如下: 一群人围成一个圆圈,放一朵花在任意一个人手里。 开始打鼓,拿到的人会把花尽快的传给旁边的人。 鼓声停止,这个时候花在谁手里,谁就退出圆圈,结束游戏。...将参与人员入队(参与人员围成一个圆圈) 模拟击鼓,以进来的次数为条件遍历队列,将队列的队顶元素追加至队尾(如果你将传给了旁边的人,你被淘汰的威胁就立刻解除了)。.../lib/Queue.ts"; /** * 击鼓函数 * @param nameList 参与人员列表 * @param num 多少次为一轮 * @returns {{eliminates...queue.enqueue(nameList[i]); } // 队列的大小大于1就继续执行 while (queue.size() > 1){ // 模拟击鼓

50240

TypeScript 实战算法系列(二):实现队列与双端队列

队列实现击鼓游戏 由于队列经常被应用在计算机领域和我们的现实生活中,就出现了一些队列的修改版本。 例如循环队列,我们通过实现一个击鼓游戏来理解循环队列。...游戏规则 击鼓游戏的规则如下: 一群人围成一个圆圈,放一朵花在任意一个人手里。 开始打鼓,拿到的人会把花尽快的传给旁边的人。 鼓声停止,这个时候花在谁手里,谁就退出圆圈,结束游戏。...将参与人员入队(参与人员围成一个圆圈) 模拟击鼓,以进来的次数为条件遍历队列,将队列的队顶元素追加至队尾(如果你将传给了旁边的人,你被淘汰的威胁就立刻解除了)。.../lib/Queue.ts"; /** * 击鼓函数 * @param nameList 参与人员列表 * @param num 多少次为一轮 * @returns {{eliminates...queue.enqueue(nameList[i]); } // 队列的大小大于1就继续执行 while (queue.size() > 1){ // 模拟击鼓

1.1K10

【数据结构基础】队列简介(使用ES6)

deque.addFront('John'); // John comes back for information console.log(deque.toString()); // John,Jack” 实际应用举例1:击鼓...不知道大家玩过击鼓吗,笔者最怕玩这个,不知道是点背还在咋地,这个花球总和我有缘,本身就五音不全还要表演,人可丢大了。...什么是击鼓,在这里给没玩过的朋友解释下:数人或几十人围成圆圈坐下,其中一人拿(或一小物件);另有一人背着大家或蒙眼击鼓(桌子、黑板或其他能发出声音的物体),鼓响时众人开始依次,至鼓停止为止。...The winner is: John 代码运行时,队列的变化示意图如下: 击鼓示意图.png 实际应用举例2:验证英语回文 许多英语单词无论是顺读还是倒读,其词形和词义完全一样,如dad(爸爸)、...并且运用循环队列的机制实现了击鼓的游戏,同时又运用双端队列的结构实现了回文的验证。

78240

【数据结构基础】队列简介(使用ES6)

'John'); // John comes back for information console.log(deque.toString()); // John,Jack” 05 实际应用举例1:击鼓...不知道大家玩过击鼓吗,笔者最怕玩这个,不知道是点背还是咋地,这个花球总和我有缘,本身就五音不全还要上台表演,人可丢大了。...什么是击鼓,在这里给没玩过的朋友解释下:数人或几十人围成圆圈坐下,其中一人拿(或一小物件);另有一人背着大家或蒙眼击鼓(桌子、黑板或其他能发出声音的物体),鼓响时众人开始依次,至鼓停止为止。...并且运用循环队列的机制实现了击鼓的游戏,同时又运用双端队列的结构实现了回文的验证。

58820

Java值调用

Java值调用 (本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨) 引子 之所以写这篇文章是因为前些天写了一篇《Java中真的只有值传递么?》...从那篇文章后,我了解到Java的参数传递其实牵涉到了Java语言的设计中的参数传递方式,可能在语言设计之时就考虑了这个问题,所以在工作之余自己简单的研究了一下,最终也能根据自己的理解解释一下关于Java...值调用:在值调用中,实际参数被求值后传递给被调函数。也就是说值调用是实参在被传给函数之前就被求值的一种求值策略。 在Java中的体现 那什么叫实参在被传给函数之前就被求值呢?求的是谁的值呢?...总结 最后得出的结论:从语言设计的角度,Java的方法调用时参数的求值策略是值调用(Call by value)的。...如果是从程序语言设计的求值策略角度来问Java是哪种求值策略的话,那可以肯定的说是值调用(Call by value)。 (以下术语摘抄自Wiki。

3.5K20
领券