《设计模式 ● 责任链》之业务场景

/**************************************************************************************************
** 模式的初衷,无非是为我们经常出现问题的业务逻辑或系统结构提供好的解决方案,不论
** 是高层的还是较低层次的;而应用模式的主要工作则是模式识别,能将单一或复合的模式
** 结合项目自身的业务特性放在适当的场景中,则需要努力追求和不断积累。
************************************************************************************************/

 

       责任链: 解除请求的发送者和接收者之间的耦合,而使多个对象有机会处理这个请求。将这些请求连成一个链,并沿着这条链传递该请求,直到有个对象处理它(诸多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受)。

§ 场景1

       手机平台系统常有提供对手机日程、电话、短信、通话记录等信息的备份,通常应用平台会提供可选择备份项的UI给用户,变化部分主要有以下几点:

1、 系统增加或删除备份项目

2、 用户可选择备份、还原项不固定,致使应用无法良性的判断该执行哪些备份


代码示例:

http://download.csdn.net/download/webwalker/7470265

		//create handler instance
		BaseHandler h1 = new AgendaHandler();
		BaseHandler h2 = new CallHandler();
		BaseHandler h3 = new PhoneHandler();
		BaseHandler h4 = new SmsHandler();		
		//set next chain node
		h1.SetSuccessor(h2);
		h2.SetSuccessor(h3);
		h3.equals(h4);
		
		//process request
		List<String> checkedList = this.GetCheckedListItem();		
		h1.Handle(checkedList);



 


§ 场景2

类似Work flow中面向流程性的处理方案也是一个很好的选择,关于WF这里不在赘述。在面向这种流程性事务处理过程中,简单的说就是你有很多业务,这些业务都有各自的业务处理流程,且这些流程有很多相同的事务处理逻辑,则大可通过将每个主要的业务流程作为一个处理Step、一个链节点,通过配置链节点的先后顺序,来完成一系列业务逻辑的执行过程。而各个节点或事务step可通过上下文实现数据共享与串联(对链中各环节存有共性、异性的地方进行变化封装,而后与主链进行衔接)。

 

§ 场景3

       增值业务中,常有提供规则设置UI给使用者,以便使用者可以委托付款周期、自动充值(按天、按周、按月、按年、按小时)、自动提现等,当然每部分需采用不同的算法策略。在此基础上,主要的变化部分如下:

1、 每个商户可设置的规则类型不固定

2、 每个商户可设置的规则个数不固定

3、 每个商户设置的时间点不固定

通过链接的方式完成不同过则的自动匹配与处理较佳!

 

§ 总结

       除了以上显示的设置链条的节点外,还可采用隐式的方式实现链条节点的自动切换。(也即通过提供统一的抽象方法或接口,实现获取下一个链节点接收对象,在内部完成链节点的切换),另外,针对策略的不同情况,适当时候我们还可以增加针对策略的接口,提供策略可执行判断、不同策略待验证项等等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值