Elegant design mode to write the code

Strategy Mode

In ifelse inside

Template Method Pattern

getUserById, before each query must first query cache, query cache this part of the code templates, to achieve as long as the class to query the database

//1.模板
@Component
public class ModuleTemplate {
    @Autowired
    private RedisTemplate redisTemplate;

    public <T> T getObjectById(Integer key, BaseService<T> baseService){
        T result = (T) redisTemplate.opsForValue().get(key);
        if (null == result){
            synchronized (this){
                //查询缓存
                result = (T) redisTemplate.opsForValue().get(key);
                if (null == result){
                    //查询数据库
                    result = baseService.getObjectById();
                    redisTemplate.opsForValue().set(key,result);
                }
            }
        }
        return result;
    }
}
//2.base接口,用作实现类查询数据库
@FunctionalInterface
public interface BaseService<T> {
    public T getObjectById();
}
//3.UseService接口和实现类

public interface UserService {
    public User getUserByIdTemplate(Integer userId);
}



@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private ModuleTemplate moduleTemplate;

  @Override
    public User getUserByIdTemplate(Integer userId) {
        User user = moduleTemplate.getObjectById(userId,() ->{
            //查询数据库
            return getUserById(userId);
        });
        return user;
    }
}
Published 172 original articles · won praise 0 · Views 5694

Guess you like

Origin blog.csdn.net/weixin_44635157/article/details/104631829