设计模式写优雅代码

策略模式

在ifelse里面

模板方法模式

getUserById,每次查询之前都要先查询缓存,把查询缓存这部分代码模板化,实现类只要查询数据库

//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;
    }
}
发布了172 篇原创文章 · 获赞 0 · 访问量 5694

猜你喜欢

转载自blog.csdn.net/weixin_44635157/article/details/104631829
今日推荐