标签:
以一个简单的例子来记这个抽象的技巧:
public String reverse(String str){ if(str == null){ //打log,return } String s = StringUtils.reverse(str); if(s == null){ //打log,return } return s; } public List reverse(List list){ if(list == null){ //打log,return } List result = Lists.reverse(list); if(result == null){ //打log,return } return result; } public Set<String> reverse(Set<String> stringSet){ if(stringSet == null){ //打log,return } Set<String> set = Sets.newHashSet(); for(String s : stringSet){ set.add(StringUtils.reverse(s)); } if(set == null){ //打log,return } return set; }
//首先定义接口,只有一个方法,传入一个参数,得到一个返回值 public interface Processor<P,R>{ public R process(P p); } //编写一个处理器,这个方法的逻辑是:1,参数校验2,进行处理3,结果校验 private <P, R> R doSomething(P p, Processor<P, R> processor){ if(p == null){ //打log,return } R result = processor.process(p); if(result == null){ //打log,return } return result; } //下面三个问题要求的方法如下,把参数和处理的方式交个上面的doSomething处理,直接将结果返回就可以了 //可以看到三个方法都只是重写了process方法 public String reverse(String str){ return doSomething(str, new Processor<String, String>() { @Override public String process(String s) { return StringUtils.reverse(s); } }); } public List reverse(List list){ return doSomething(list, new Processor<List, List>() { @Override public List process(List list) { return Lists.reverse(list); } }); } public Set<String> reverse(Set<String> stringSet){ return doSomething(stringSet, new Processor<Set<String>, Set<String>>() { @Override public Set<String> process(Set<String> strings) { Set<String> set = Sets.newHashSet(); for (String s : strings) { set.add(StringUtils.reverse(s)); } return set; } }); }
标签:
原文地址:http://www.cnblogs.com/just84/p/4805387.html