版权声明:本文为博主原创文章,转载请与博主联系获得授权 https://blog.csdn.net/qq_24091555/article/details/84138630
在平常项目开发中,不知道你们有没有遇上这么一个现象:业务模块在进行某个业务运算前, 都要先通过一些验证。随着业务扩展,这些验证越来越多,if-else的写法越来越显得麻烦,而且很多部分不能实现复用。基于为解决以上痛点,我用采用这样的写法,效果还不错。
废话不多说,看Demo。
验证接口类:Condition.java
/**
* 验证接口
* @param <T>
*/
public interface Condition<T> {
/**
* 验证
* @param t
*/
void valid(T t);
}
验证条件实现类:UserTypeCondition.java
/**
* 用户类型验证条件
* @author rocky
* @date 2018-11-16 13:53
*/
public class UserTypeCondition implements Condition<User> {
@Override
public void valid(User user) {
if (user.getUserType() != UserType.MEMBER) {
throw new ValidException("用户不是会员,不能执行该操作。");
}
}
}
/**
* 用户类型
*/
public enum UserType {
/**
* 普通用户
*/
ORDINARY,
/**
* 会员用户
*/
MEMBER;
}
/**
* @author rocky
* @date 2018-11-16 13:53
*/
public class User {
private String username;
private String password;
private UserType userType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserType getUserType() {
return userType;
}
public void setUserType(UserType userType) {
this.userType = userType;
}
}
核心代码:
/**
* @author rocky
* @date 2018-11-16 13:58
*/
public class Test {
public static void main(String[] args) {
/* 模仿业务操作 */
User user = new User();
user.setUsername("小张");
user.setUserType(UserType.ORDINARY);
/* 验证条件List,后续有增加,只要实现Condition接口,往List add */
List<Condition<User>> conditionList = Arrays.asList(new UserTypeCondition());
/* 进入验证 */
validUser(user, conditionList);
//todo 后面进行核心业务
}
/**
* 进行对user进行业务验证
* @param user
* @param conditionList
*/
public static void validUser(User user, List<Condition<User>> conditionList) {
conditionList.forEach(condition -> {
condition.valid(user);
});
}
}
这样的方式,在后续增加业务层面的验证时,可以实现验证接口,然后添加到验证条件实现类的List。这样就大大增加了扩展的灵活性。而且在同样业务领域内,这些验证条件实现类可以实现复用。