一个比较好的Processor

主要用于经常做一些多维度处理,通过处理类的实现,能够满足代码的精简和美观

1.接口Processor

package com.lxp.processor;

/**
 * 处理接口,抽象类A继承这个接口,实现其中方法,具体业务抽象类B继承A,具体业务逻辑类C继承抽象类B,C中一般就可以做相关的具体的
 * 逻辑内容,比如数据库dao操作、其它数据结构的内容存储
 */
public interface Processor<T> {
	public void process(T context) throws Exception;
}
2.接口实现抽象类AbstractProcessor

package com.lxp.processor;

/**
 * 不能直接被实现类所继承,需要以抽象类来继承,以归类各个processor,其它所有的业务抽象processor都继承这个,
 * 具体实用类,通过调用process方法,去调用子类的doProcess方法,
 * 
 */
public abstract class AbstractProcessor<T> implements Processor<T>{
	public void process(T context) throws Exception {
		if(needRun(context)) {
			validate(context);
			doProcess(context);
		}
	}
	
	protected abstract void doProcess(T context) throws Exception;
	
	protected void validate(T context) {
		if(null == context) {
			throw new IllegalArgumentException("ProcessContext must not be null");
		}
	}
	
	protected boolean needRun(T context) {
		return true;
	}
}

3.业务抽象类

(1)查询

package com.lxp.processor.query;

import com.lxp.context.UserInfoContext;
import com.lxp.processor.AbstractProcessor;

public abstract class QueryUserInfoAbstractProcessor<T extends UserInfoContext> extends AbstractProcessor<T>{
}

(2)更新

package com.lxp.processor.update;

import com.lxp.context.UserInfoContext;
import com.lxp.processor.AbstractProcessor;

public abstract class UpdateUserInfoAbstractProcessor<T extends UserInfoContext> extends AbstractProcessor<T>{
}

4.业务具体逻辑类

(1)查询

package com.lxp.processor.query;

import java.util.List;

import com.lxp.context.UserInfoContext;
import com.lxp.processor.Processor;


public class QueryUserInfoProcessor extends QueryUserInfoAbstractProcessor<UserInfoContext>{
	
	private List<Processor<UserInfoContext>> userInfoProcessors;
	
	/**
	 * 由于是protected,所以该方法只能被继承类获取处理,普通的类是无法看到该方法的,但是可以看到process方法,这样就能够通过父类process方法,调用doProcess方法
	 * 该doProcess方法中可以做一些具体的逻辑处理,用于context使用
	 */
	@Override
	protected void doProcess(UserInfoContext context) throws Exception {
		for(Processor<UserInfoContext> userInfoProcessor:userInfoProcessors) {
			userInfoProcessor.process(context);
		}
	}
}
(2)更新

package com.lxp.processor.update;

import java.util.List;

import com.lxp.context.UserInfoContext;
import com.lxp.processor.Processor;


public class UpdateUserInfoProcessor extends UpdateUserInfoAbstractProcessor<UserInfoContext>{
	
	
	/**
	 * 由于是protected,所以该方法只能被继承类获取处理,普通的类是无法看到该方法的,但是可以看到process方法,这样就能够通过父类process方法,调用doProcess方法
	 * 该doProcess方法中可以做一些具体的逻辑处理,用于context使用
	 */
	@Override
	protected void doProcess(UserInfoContext context) throws Exception {
		if(context.getUserIdList()!=null) {
//			context.setUserInfoList(/*根据UserIdList获取UserIdList信息,操作数据库*/);
//			一般就可以在Processor具体类中做一些dao的操作或者其它一些context数据处理
		}
	}
}
5.context类

package com.lxp.context;

import java.util.List;

import com.lxp.dto.UserInfoDto;

public class UserInfoContext {
	private List<UserInfoDto> userInfoList;
	private List<Long> userIdList;
	public List<UserInfoDto> getUserInfoList() {
		return userInfoList;
	}
	public void setUserInfoList(List<UserInfoDto> userInfoList) {
		this.userInfoList = userInfoList;
	}
	public List<Long> getUserIdList() {
		return userIdList;
	}
	public void setUserIdList(List<Long> userIdList) {
		this.userIdList = userIdList;
	}
}
6.dto类

package com.lxp.dto;

public class UserInfoDto {
	private Long id;
	private String name;
	private String age;
	private String address;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}













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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值