1 背景
系统中由一批订单,每条订单都有一个渠道chlId,功能是要完成根据不同的渠道,发给不同的渠道
不同的渠道发送方式不同,例如 chlId=1 要做发送短信, chlId=2 要发送mq, chlId=3 通过接口调用发送到第三方.
package com.sitech.mkt.duty;
/**
* @oauth: qiangSW
* @date: 2020/1/22 10:00
* @description: com.sitech.mkt.duty
* @doc:
*/
public abstract class SMSSupprot {
public SMSSupprot next;
public SMSSupprot addSupport(SMSSupprot supprot) {
return this.next = supprot;
}
public void supportResolve(int chlId) {
if (resolve(chlId)) {
if (done(chlId)) {
success(chlId);
} else {
fail(chlId);
}
}
}
public abstract boolean resolve(int chlId);
/**
* 短信渠道
*
* @param contactOrder
* @return
*/
public boolean done(int chlId) {
if (1 = chlId) {
//执行发送短信方法
return true;
} else if (null != this.next) {
this.next.resolve(chlId);
}
return false;
}
public void success(int chlId) {
System.out.prientl("执行成功");
}
public void fail(int chlId) {
System.out.prientl("执行失败");
}
}
package com.sitech.mkt.duty;
import com.sitech.crmtpd.market.domain.ContactOrder;
/**
* @oauth: qiangSW
* @date: 2020/1/22 11:06
* @description: com.sitech.mkt.duty
* @doc:
*/
public class NoSupport extends SMSSupprot {
public NoSupport() {
super();
}
/**
* 开始执行责任
* @param contactOrder
* @return
*/
@Override
public boolean resolve(ContactOrder contactOrder) {
return true;
}
}
package com.sitech.mkt.duty;
/**
* @oauth: qiangSW
* @date: 2020/1/22 13:19
* @description: com.sitech.mkt.duty
* @doc: 发送mq
*/
public class HoPushJT extends SMSSupprot {
@Autowired
private HoPushDianQuWithOrder pushDianQuWithOrder;
public HoPushJT() {
super();
}
/**
* 发送mq
*
* @param contactOrder
* @return
*/
@Override
public boolean resolve(int chlId) {
if (2 = chlId) {
// 执行发送mq方法
return true;
} else if (null != this.next) {
this.next.resolve(chlId);
}
return false;
}
}
package com.sitech.mkt.duty;
/**
* @oauth: qiangSW
* @date: 2020/1/22 13:19
* @description: com.sitech.mkt.duty
* @doc: 通过http发送
*/
public class SendOnHttp extends SMSSupprot {
@Autowired
private HoPushDianQuWithOrder pushDianQuWithOrder;
public HoPushJT() {
super();
}
/**
* 发送mq
*
* @param contactOrder
* @return
*/
@Override
public boolean resolve(int chlId) {
if (3 = chlId) {
// 执行发送Http方法
return true;
} else if (null != this.next) {
this.next.resolve(chlId);
}
return false;
}
}
//调用方法
public static void main(String[] args) {
HoPushJT hoPushJT = new HoPushJT();
SendOnHttp sendOnHttp = new SendOnHttp();
SMSSupprot supprot = new NoSupport();
supprot.addSupport(hoPushJT);
hoPushJT.addSupport(sendOnHttp);
supprot.resolve(2)
}