您的位置:首页 > 编程语言

拦截器模式

2016-07-05 17:37 363 查看
做业务系统时,最好将每个步骤的代码封装在拦截器类中,这样可以减少重复代码

public interface Intercepter {
public void intercept(IntercepterChain intercepterChain) throws Exception;
}

public interface IntercepterChain {
public void proceed() throws Exception;
}

public interface JieSuanYeService {
public JiesuanYueGetChannelsUsableResponse getJieSuanYePayChannelsUsable();
}

@Service("jieSuanYeService")
public class JieSuanYeServiceImpl implements JieSuanYeService {
Logger logger = LoggerFactory.getLogger(JieSuanYeServiceImpl.class);
@Resource
private List<Intercepter> jieSuanYeIntercepters;

@Override
@Profiled(tag = "service.getJieSuanYePayChannelsUsable")
public JiesuanYueGetChannelsUsableResponse getJieSuanYePayChannelsUsable(){
try{
new IntercepterChainImpl(jieSuanYeIntercepters.iterator()).proceed();
}catch (Exception e){
logger.error("处理链路发生异常", e);
ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse().getResult().setInfo(e.toString());
ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse().getResult().setSuccess(false);
}

return ThreadLocalHolder.getJiesuanYueGetChannelsUsableResponse();
}

}

/**
* Created by liyiwen1 on 2016/7/1.
*/
public class IntercepterChainImpl implements IntercepterChain {
private Iterator<Intercepter> iterator;

@Override
public void proceed() throws Exception{
if (iterator.hasNext()){
iterator.next().intercept(this);
}
}
public IntercepterChainImpl(Iterator<Intercepter> iterator){
this.iterator = iterator;
}
public Iterator<Intercepter> getIterator() {
return iterator;
}

public void setIterator(Iterator<Intercepter> iterator) {
this.iterator = iterator;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息