范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

ApacheCommonsChain(2)开源责任链模式(apachecommonschain)

  前一篇 文章,我们大概介绍了 Apache commons chain 及完成了一个简单的demo ,今天我们就从 源码级别来分析下,到底是一个什么样的执行流程 ~~~~!
  首先从执行入口类: public class CommondChain extends ChainBase {      public CommondChain() {         super();         addCommand(new GetUserInfo());         addCommand(new TestDriver());         addCommand(new NegotiateSale());         addCommand(new ArrangeFinancing());         addCommand(new CloseSale());     }      public static void main(String[] args) {         CommondChain commondChain = new CommondChain();         Context context = new ContextBase();          try {             commondChain.execute(context);         } catch (Exception e) {             e.printStackTrace();         }     } }
  我们从两个方面来进行源码解析:
  1、实现了Command 的业务功能如何加入容器中?加入到什么容器中?
  具体实现 在 ChainBase.class    public void addCommand(Command command) {          if (command == null) {             throw new IllegalArgumentException();         }         if (frozen) {             throw new IllegalStateException();         }         Command[] results = new Command[commands.length + 1];         System.arraycopy(commands, 0, results, 0, commands.length);         results[commands.length] = command;         commands = results;      }
  其中,commands 为数组类型。说白了就是加入一个业务处理command 就追加到数组里面去。
  如何执行这个流程呢?
  具体调用也是在 ChainBase.class   public boolean execute(Context context) throws Exception {          // Verify our parameters         if (context == null) {             throw new IllegalArgumentException();         }          // Freeze the configuration of the command list         frozen = true;          // Execute the commands in this list until one returns true         // or throws an exception         boolean saveResult = false;         Exception saveException = null;         int i = 0;         int n = commands.length;         for (i = 0; i < n; i++) {             try {                 saveResult = commands[i].execute(context);                 if (saveResult) {                     break;                 }             } catch (Exception e) {                 saveException = e;                 break;             }         }          // Call postprocess methods on Filters in reverse order         if (i >= n) { // Fell off the end of the chain             i--;         }         boolean handled = false;         boolean result = false;         for (int j = i; j >= 0; j--) {             if (commands[j] instanceof Filter) {                 try {                     result =                         ((Filter) commands[j]).postprocess(context,                                                            saveException);                     if (result) {                         handled = true;                     }                 } catch (Exception e) {                       // Silently ignore                 }             }         }          // Return the exception or result state from the last execute()         if ((saveException != null) && !handled) {             throw saveException;         } else {             return (saveResult);         }      }
  看下 代码实现思路还是很简单的哈~~ 定义一个基类 业务逻辑分别实现该基类 迭代该数组集合类 调用业务类实现方法,完成顺序一个执行流程
  Filter 部分代码逻辑,同理,自行去分析看下了~~~
  ----------------------研究源码最好的方式就是 Debug

聪明进化的石头扫地机器人T7体验前言智能扫地机器人早已走入了人们生活,成为家电中重要成员之一。它的发展也非常快速,更新换代不断地聪明进化。近日,我有幸从从ZKER搞机团得到一款由石头科技roborock最新推出的高清宽幅打印的喵喵机MAX打印机体验高清宽幅打印的喵喵机MAX打印机体验前言在我们日常学习工作和娱乐中,很多时候离不开打印机。不过,传统的打印机体积较大,不可能随身携带,不能随心打印。而市面上出现热敏打印机虽然体积小即拖即净的Shark鲨客蒸汽除菌拖把P3即拖即净的Shark鲨客蒸汽除菌拖把P3前言拖地是每个家庭的家务活之一,使用传统的拖地工具拖地清洁,不但辛苦累,而且清洁也不干净,往往拖地后会余留水渍等。即使再用干拖把把余留水渍拖干燥污染一并解决的airxA9H加湿净化一体机干燥污染一并解决的airxA9H加湿净化一体机前言随着人们对居住环境的空气质量的关注度越来越高,能快速高效净化室内空气,改善家居空气质量的空气净化器也受到众多的人们关注和热捧。近日存储制胜之道的ORICO潮酷双协议硬盘盒套装体验存储制胜之道的ORICO潮酷双协议硬盘盒套装体验前言随着硬盘盒和不同容量的硬盘出现,当人们在需要随身携带电子数据,或者需要把数据从一个数码设备移到另一个数码设备时,除了可以选择u盘红白机小游戏网页在线畅玩(网站篇)这个网站叫做中文家用游戏博物馆,提到博物馆可能就非常的古老,网站里面有很多红白游戏世嘉机游戏等等点开之后就可以在线玩耍,非常的可以,不管怎样,把这份美好记忆留住,就是最大的美好,喜年轻人第一款蓝牙耳机,漫步者FunBuds耳机,给我诸多惊喜年轻人的第一款蓝牙耳机,漫步者FunBuds耳机,给我诸多惊喜现在越来越多的手机取消了3。5毫米耳机插口,平时喜欢用手机听音乐,玩游戏的用户肯定非常不习惯,虽然厂商提供了耳机转化线极乐音乐app下载(软件篇)我们要学会理解,宽以待人,别人也会友善的对待你。凡事斤斤计较,贪便捡巧,别人会把你看的低贱矮小。其实人们只要能学会换位思考,理解每一个都有他的难处,都有他的不易,这样抱怨的就会越来Foobar2000(无损音乐播放器下载)(软件篇)花开雪落终有时,人生起伏平常事。有些话,劝得了别人,却劝不了自己有些事,只是不再提及,却永久封存在了心底。(美文美句)大家好,今天我给小伙伴推荐一款简约无广告的音乐播放器,foobMSDN我告诉你,下载镜像的网站作为一个极客,安装系统通常都是必备技能。但想找到官方原版的镜像文件,并不容易。最近发现了一个下载镜像的网站,可以使用直链下载微软官方的全部镜像。MSDN,我告诉你镜像站的趋势,对喜任务栏改色StartIsBack绿化中文版(软件篇)软件简介StartIsBack中文版下载(win10开始菜单)是一款非常不错的开始菜单设置工具。它能够支持用户的修改设计,更改开始菜单及开始按钮的外观以及样式和风格,更加可以自定义
把豪车戴在手上把发动机塞进手表布加迪联名手表近200万近日,JacobCo。手表联名布加迪推出了陀飞轮手表,该系列的设计灵感来自于Chiron,设计师将布加迪的W16发动机模型塞进了手表里,并且还原了可以活动的曲轴和活塞。目前还没有定解放暴增4倍天然气重卡发动机111月分析临近年底,天然气重卡和发动机市场正在起变化。由于车用LNG价格迅速上涨,很可能会对天然气重卡及动力市场造成困扰甚至抑制,12月乃至明年一季度的天然气重卡和发动机市场,正面临着下滑的尼日利亚会遵从西共体5年二手车限制令吗?根据PUNCH网站报道,尼日利亚汽车经销商协会近日表示,一旦尼日利亚实施了西非国家经济共同体燃油等级和车辆排放标准条例,从明年开始,进口到尼日利亚的汽车价格将大幅上涨。西非国家经济作为苹果迷你选哪一款苹果AppleCar概念车量产呢?苹果也要造车了有媒体报道称,关键供应链厂商已证实,苹果计划在明年9月发布首款AppleCar!这比原先规划至少提前了两年时间,甚至AppleCar原型车已经在美国加州上路测试。外界这十年间,你应该投中国股市还是美国股市?对于上述这个问题,基本的观点是应该投中国股市。这从暴富概率和避免风险这两个角度看,统计数据支持这个观点。本文对中美两国股市的统计,数据的时间跨度为2011年6月2日2021年6月1抢占信息科技制高点,巨头瞄向系统加速物联网落地文杨剑勇信息科技发展惊人,PC互联网已成为历史,移动互联网也逐渐褪去,继而进入一个数以百亿连接规模的万物互联时代,而芯片通信与系统是贯穿每个信息科技发展基础。诸如PC互联网时代下的真实的变形金刚XBUS电动车一辆车可以变出七种形态近日,德国品牌ElectricBrands发布一款名为XBUS的电动车,有趣的是,它的尺寸并不像车名中的BUS那么大,而是一款长度仅有3。6米的轻型电动车。据悉,新车的起售价格为1满血暴走的Hero大盘点有一个99的人猜不到游戏陪伴小伙伴走过了无数个青春日夜,一代游戏一代神,记忆里总有抹不去的经典瞬间。无论是被boss狂虐,还是被玩家吊打,总有那么几个游戏Hero让人印象深刻。盘点那些满血暴走的Her史上最强奇骏的价格策略配置较同级竞品略胜一筹在全球,每五位奇骏车主中,就有一位来自中国。这就是奇骏的魅力。迄今,奇骏在全球市场累计销量超过650万辆,其中中国市场累计超过142万辆,移居第一阵营。7月30日,在内蒙古响沙湾,中证商品指数有限责任公司在河北雄安新区开业运营证监会发布微信公号3月31日消息,当日,中证商品指数有限责任公司在河北雄安新区市民服务中心举行开业仪式。中国证监会副主席方星海,河北省副省长葛海蛟,雄安新区党工委副书记管委会常务副这些公司有望调入沪深300中证500上证50三大指数按照惯例,6月包括沪深300中证500上证50在内的一系列指数将执行2021年年中指数样本股的调整。因此各大机构往往会依据相关规则对调整名单进行预测。约25只个股有望调入沪深300