假如要让你封装jedis以便让外界调用你大概率会像下面方法一样实现。
@Service
public class JedisSpringDemo {
@Resource(name = "shardedJedisPool")
private ShardedJedisPool shardedJedisPool;
public String set(String key, String value){
ShardedJedis shardedJedis = null;
try{
// 从连接池中获取jedis分片对象
shardedJedis = shardedJedisPool.getResource();
// 设置值到redis中
return shardedJedis.set(key, value);
}catch (Exception e){
System.out.println(e.getMessage());
}finally {
if(null != shardedJedis){
shardedJedis.close();
}
}
return null;
}
public String get(String key){
ShardedJedis shardedJedis = null;
try{
// 从连接池中获取jedis分片对象
shardedJedis = shardedJedisPool.getResource();
// 从redis中获取key对应value
return shardedJedis.get(key);
}catch (Exception e){
System.out.println(e.getMessage());
}finally {
if(null != shardedJedis){
shardedJedis.close();
}
}
return null;
}
}
上面的这段代码违反了DRY原则,两个方法get()和set()大部分代码是相同的(try,catch,finally这部分代码),唯一不同的就是我们return的那一行具体的调用方法,如果像这种方法很多的话(jedis提供了几十种类似的方法),我们的代码重复率是很高的,代码重复率一旦高起来,相应的维护成本也会提高,下面我们就来引进一种改进方法–回调机制。