这种模式在我们是实际工作中用的是最多的,项目中的各种 BaseController BaseService BaseDao BaseManager采用的都是模板方法模式,其本质就是将一些公共的行为抽取出来形成一个抽象类,由子类去继承,这样对于公共的部分就不需要每个子类再写一遍。优点:封装固定的公用的部分,扩展可变的部分。
/**
* @desc 控制层模板
* @date 2020年9月8日
* @author liujl
*/
public abstract class ControllerTemplate {
public abstract Object queryList(String jsonCondition);
public abstract Object insert(Object obj);
public abstract Object queryById(Long id);
/**
* 通用查询条件转换类
* @param jsonParam
* @return
*/
protected Object jsonConvertToParam(String jsonParam) {
// 将查询条件转成Map 或 Param 实体
return new Object();
}
/**
* 校验用户是否有操作该接口的条件
* @param user
* @return
*/
protected boolean authentication(Object user, Long functionId) {
Set<Long> funcIds = new HashSet<>();
if (funcIds.contains(functionId)) {
return true;
}
return false;
}
}
/**
* @desc 用户维护
* @date 2020年9月8日
* @author liujl
*/
public class UserController extends ControllerTemplate {
@Override
public Object queryList(String jsonCondition) {
Object obj = super.jsonConvertToParam(jsonCondition);
// userService.queryList(obj);
return null;
}
@Override
public Object insert(Object obj) {
Long functionId = 1L;
Object user = null; // 从session里拿,统一工具类
if (super.authentication(user, functionId)) {
// 新增逻辑
} else {
return "errCode";
}
return null;
}
@Override
public Object queryById(Long id) {
// TODO Auto-generated method stub
return null;
}
}