1700481966
设计模式之禅 34.2 混编小结
1700481967
1700481968
在这里的例子中用到了以下模式:
1700481969
1700481970
❑责任链模式
1700481971
1700481972
负责对命令的参数进行解析,而且所有的扩展都是增加链数量和节点,不涉及原有的代码变更。
1700481973
1700481974
❑命令模式
1700481975
1700481976
负责命令的分发,把适当的命令分发到指定的链上。
1700481977
1700481978
❑模板方法模式
1700481979
1700481980
在Command类以及子类中,buildChain方法是模板方法,只是没有基本方法而已;在责任链模式的CommandName类中,用了一个典型的模板方法handlerMessage,它调用了基本方法,基本方法由各个实现类实现,非常有利于扩展。
1700481981
1700481982
❑迭代器模式
1700481983
1700481984
在for循环中我们多次用到类似for(Class c:classes)的结构,是谁来支撑该方法运行?当然是迭代器模式,只是JDK已经把它融入到了API中,更方便使用了。
1700481985
1700481986
可能读者已经注意到了,“ls-l-a”这样的组合选项还没有处理。确实没有处理,以下提供两个思路来处理:
1700481987
1700481988
❑独立处理
1700481989
1700481990
“ls-l-a”等同于”ls-la”,也等同于”ls-al”命令,可以把”ls-la”中的选项”la”作为一个参数来进行处理,扩展一个类就可以了。该方法的缺点是类膨胀得太大,但是简单。
1700481991
1700481992
❑混合处理
1700481993
1700481994
修正命令族处理链,每个命令处理节点运行完毕后,继续由后续节点处理,最终由Command类组装结果,根据每个节点的处理结果,组合后生成完整的返回信息,如”ls-l-a”就应该是LS_L类与LS_A类两者返回值组装的结果,当然链上的节点返回值就要放在Collection类型中了。
1700481995
1700481996
该框架还有一个名称,叫做命令链(Chain of Command)模式,具体来说就是命令模式作为责任链模式的排头兵,由命令模式分发具体的消息到责任链模式。对于该框架,读者可以继续扩展下去。当然,上面的程序还可以优化,优化的结果就是Command类缩为一个类,通过CommandEnum配置文件类传递命令,这比较容易实现,读者可以自行设计。
1700481997
1700481998
1700481999
1700482000
1700482002
设计模式之禅 第35章 工厂方法模式+策略模式
1700482003
1700482005
35.1 迷你版的交易系统
1700482006
1700482007
大家可能对银行的交易系统充满敬畏之情,一听说是银行的IT人员,立马想当然地认为这是个很厉害的人物,那我们今天就来对银行的交易系统做一个初步探讨。国内一家大型集团(全球500强之一)计划建立全国“一卡通”计划,每个员工配备一张IC卡,该卡基本上就是万能的,门禁系统用它,办公系统用它,你想打开自己的邮箱,没有它就甭想了,它还可以用来进行消费,比如到食堂吃饭,到园区内的商店消费,甚至洗澡、理发、借书、买书等等都可以用它,只要这张卡内有余额,在集团内部就是一张借记卡(当然还有一些内部的补助通过该卡发放)。我们要讲解的就是“一卡通”项目联机交易子系统,类似于银行的交易系统,可以说它是交易系统的mini版吧。
1700482008
1700482009
该项目具有一定的挑战性,集团公司的架构分为三层:总部、省级分部、市级机构,业务要求是“一卡通”推广到全国,一名员工从北京出差到了上海,凭一卡通能在北京做的事情在上海同样能完成。对于联机交易子项目,异地分支机构与总部之间的通信采用了MQ(Message Queue,消息队列)传递消息,也就是我们观察者模式的BOSS版,与目前的通过POS机刷信用卡基本上是一个道理。
1700482010
1700482011
联机交易子系统有一个非常重要的子模块(Module)——扣款子模块。这个模块太重要了!从业务上来说,扣款失败就代表着所有的商业交易关闭,这是不允许发生的;从技术上来说,扣款的异常处理、事务处理、鲁棒性都是不容忽视的,特别是饭点时间,并发量是很恐怖的,这对架构师提出了很高的要求。
1700482012
1700482013
我们详细分析一下扣款子模块,每个员工都有一张IC卡,他的IC卡上有以下两种金额。
1700482014
[
上一页 ]
[ :1.700481965e+09 ]
[
下一页 ]