package com.deppon.tps.module.TestResponsibilityPattern;
public interface Handler {
public void operator();
}
package com.deppon.tps.module.TestResponsibilityPattern;
public class AbstractHandler {
private Handler handler;
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
}
package com.deppon.tps.module.TestResponsibilityPattern;
public class MyHandler extends AbstractHandler implements Handler {
private String name;
public MyHandler(String name){
this.name=name;
}
@Override
public void operator() {
System.out.println(name+"handed!");
if(getHandler()!=null){
getHandler().operator();
}
}
}
package com.deppon.tps.module.TestResponsibilityPattern;
public class Test {
public static void main(String[] args) {
MyHandler h1=new MyHandler("张三");
MyHandler h2=new MyHandler("李四");
MyHandler h3=new MyHandler("王五");
h1.setHandler(h2);
h2.setHandler(h3);
h1.operator();
}
}
package com.deppon.tps.module.TestResponsibilityPattern.example;
public class Test {
public static void main(String[] args) {
// 创建请求并提交到指责链中进行处理
AbstractRequest request01=new Request01("请求-01");
AbstractRequest request02=new Request02("请求-02");
AbstractRequest request03=new Request03("请求-03");
// 创建指责链的所有节点
AbstractHandler handler01=new Test().new Handler01();
AbstractHandler handler02=new Test().new Handler02();
AbstractHandler handler03=new Test().new Handler03();
// 进行链的组装,即头尾相连,一层套一层
handler01.setNextHandler(handler02);
handler02.setNextHandler(handler03);
// 每次提交都是从链头开始遍历
handler01.handleRequest(request01);
handler01.handleRequest(request02);
handler01.handleRequest(request03);
}
//抽象请求类
abstract class AbstractRequest {
String content="";
public AbstractRequest(String content){
this.content=content;
}
public String getContent(){
return content;
}
public abstract int getRequestLever();
}
//具体请求类01
public static class Request01 extends AbstractRequest{
public Request01(String content) {
new Test().super(content);
}
public int getRequestLever(){
return 1;
}
}
//具体请求类02
public static class Request02 extends AbstractRequest{
public Request02(String content) {
new Test().super(content);
}
public int getRequestLever(){
return 2;
}
}
//具体请求类03
public static class Request03 extends AbstractRequest{
public Request03(String content) {
new Test().super(content);
}
public int getRequestLever(){
return 3;
}
}
//抽象处理类
abstract class AbstractHandler {
// 责任链的下一个节点,即处理者
private AbstractHandler nextHandler = null;
// 捕获具体请求并进行处理,或是将请求传递到责任链的下一级别
public final void handleRequest(AbstractRequest request) {
// 若该请求与当前处理者的级别层次相对应,则由自己进行处理
if(this.getHandlerLever()==request.getRequestLever()){
this.handlered(request);
}else{
// 当前处理者不能胜任,则传递至职责链的下一节点
if(nextHandler!=null){
System.out.println("当前处理者 0"+this.getHandlerLever()+"不足以处理请求 0"+request.getRequestLever());
// 这里使用了递归调用
this.nextHandler.handleRequest(request);
}else{
System.out.println("职责链上的所有处理者都不能胜任该请求...");
}
}
}
// 设置责任链中的下一个处理者
public void setNextHandler(AbstractHandler nextHandler) {
this.nextHandler = nextHandler;
}
// 获取当前处理者的级别
public int getHandlerLever(){
return 0;
}
// 定义链中每个处理者具体的处理方式
protected abstract void handlered(AbstractRequest request);
}
class Handler01 extends AbstractHandler {
public int getHandlerLever(){
return 1;
}
@Override
protected void handlered(AbstractRequest request) {
System.out.println("处理者-01 处理 " + request.getContent() + "\n");
}
}
class Handler02 extends AbstractHandler {
public int getHandlerLever(){
return 2;
}
@Override
protected void handlered(AbstractRequest request) {
System.out.println("处理者-02 处理 " + request.getContent()+ "\n");
}
}
class Handler03 extends AbstractHandler {
public int getHandlerLever(){
return 3;
}
@Override
protected void handlered(AbstractRequest request) {
System.out.println("处理者-03 处理 " + request.getContent()+ "\n");
}
}
}
§ 场景1
手机平台系统常有提供对手机日程、电话、短信、通话记录等信息的备份,通常应用平台会提供可选择备份项的UI给用户,变化部分主要有以下几点:
1、 系统增加或删除备份项目
2、 用户可选择备份、还原项不固定,致使应用无法良性的判断该执行哪些备份
代码示例:
http://download.csdn.net/download/webwalker/7470265
§ 场景2
类似Work flow中面向流程性的处理方案也是一个很好的选择,关于WF这里不在赘述。在面向这种流程性事务处理过程中,简单的说就是你有很多业务,这些业务都有各自的业务处理流程,且这些流程有很多相同的事务处理逻辑,则大可通过将每个主要的业务流程作为一个处理Step、一个链节点,通过配置链节点的先后顺序,来完成一系列业务逻辑的执行过程。而各个节点或事务step可通过上下文实现数据共享与串联(对链中各环节存有共性、异性的地方进行变化封装,而后与主链进行衔接)。
§ 场景3
增值业务中,常有提供规则设置UI给使用者,以便使用者可以委托付款周期、自动充值(按天、按周、按月、按年、按小时)、自动提现等,当然每部分需采用不同的算法策略。在此基础上,主要的变化部分如下:
1、 每个商户可设置的规则类型不固定
2、 每个商户可设置的规则个数不固定
3、 每个商户设置的时间点不固定
通过链接的方式完成不同过则的自动匹配与处理较佳!