2015年最火的应该是股市和P2P理财吧?
然后2015年年底,随着e租宝事件的发酵,P2P理财行业发生了一连串连锁反应,如今一年过后,P2P江湖风云变幻,死伤无数,你,还想用P2P方式理财吗 ?
今天用责任链模式解读P2P
首先,教科书定义:在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
个人视角:责任链可以是一条直链,也可以是一条环链。 发出请求者并不关心是谁处理请求,反正请求一定会在这条链上的某一个环节得到响应、
今天的场景是:
某P2P理财公司,有三个职位(形成直链),销售处理5W以下理财,经理处理5W以上100W以下理财,总裁处理100W以上理财。
代码主角:
1、Handler类(责任链抽象父类)
2、三个Handler子类(Sales、Manager、Prisident)
3、HandlerCreator类(创建具体的Handler处理类,且定义了责任链的方向)
首先,是Handler抽象父类
//抽象父类
public abstract class Handler {
public Handler mSuccessor = null;
// 设置后继
public void setSuccessor(Handler successor) {
this.mSuccessor = successor;
}
// 处理请求
public abstract void handleRequest(int money);
}
其次是三个Handler子类
(Sales、Manager、Prisident)
//责任链底层,理财销售
public class Sales extends Handler {
// 符合条件则处理请求,否则交给后继处理
@Override
public void handleRequest(int money) {
if (money <= 5) {
System.out.println("销售接待5W以下投资客户");
} else {
mSuccessor.handleRequest(money);
}
}
}
//责任链第二层,理财经理
public class Manager extends Handler {
// 符合条件则处理请求,否则交给后继处理
@Override
public void handleRequest(int money) {
if (5 < money && money < 100) {
System.out.println("经理接待5W到100W投资客户");
} else {
mSuccessor.handleRequest(money);
}
}
}
//责任链顶层,理财总裁
public class President extends Handler {
// 链终点,处理请求
@Override
public void handleRequest(int money) {
System.out.println("总裁接待100W以上投资客户");
}
}
最后,是HandlerCreator类
// 创建类 (有点类似工厂模式)
public class HandleCreator {
public static Handler Create() {
// 实例化责任链的每个阶层
Handler sales = new Sales();
Handler manager = new Manager();
Handler president = new President();
// 设置责任链传递方向
sales.setSuccessor(manager);
manager.setSuccessor(president);
// return责任链的最底层,即链开始处
return sales;
}
}
大功告成,写个测试类Test试试:
public class Test {
public static void main(String[] args) {
System.out.println("来了一波客户,发出一连串理财请求");
// 实例化理财处理者
Handler mHandler = HandleCreator.Create();
// 生成一个随机理财的数额
Random random = new Random();
// 理财处理者对相应金额进行处理
for (int i = 0; i < 100; i++) {
mHandler.handleRequest(random.nextInt());
}
}
}
这里随机生成了100个不同金额的理财请求,交给HandleCreator创建出来的mHandler处理,客户并不知道究竟是谁在处理,
让我们看看控制台输出的结果:
来了一波客户,发出一连串理财请求
总裁接待100W以上投资客户
销售接待5W以下投资客户
总裁接待100W以上投资客户
经理接待5W到100W投资客户
销售接待5W以下投资客户
经理接待5W到100W投资客户
总裁接待100W以上投资客户
...
100条太多,只节选了部分, 可以看到,责任链上不同职位的人正确处理了不同金额的理财请求,完美的化解了一大波来袭的资金
好了,到此为止,再简单谈谈责任链的缺点吧,
缺点在于,性能和时间,无论业务类型是单一还是多样,都必须创建每个实例,没事干也得杵着,极大的占用了资源,响应时间这点上,由于是遍历传递请求,必然牺牲时间