1700483850
大家想想看,如果现在需求变更了,比如需要一个年龄小于基准年龄的用户,该怎么修改?增加一个小于基准年龄的规格书,实现IUserSpecification接口,然后在新的业务中调用即可,别的什么都不需要修改。再比如需要一个类似SQL中like语句的处理逻辑,这个也不难如代码清单37-12所示。
1700483851
1700483852
代码清单37-12 Like规格书
1700483853
1700483854
public class UserByNameLike implements IUserSpecification{
1700483855
1700483856
//like的标记
1700483857
1700483858
private final static String LIKE_FLAG=”%”;
1700483859
1700483860
//基准的like字符串
1700483861
1700483862
private String likeStr;
1700483863
1700483864
//构造函数传递基准姓名
1700483865
1700483866
public UserByNameLike(String_likeStr){
1700483867
1700483868
this.likeStr=_likeStr;
1700483869
1700483870
}
1700483871
1700483872
//检验用户是否满足条件
1700483873
1700483874
public boolean isSatisfiedBy(User user){
1700483875
1700483876
boolean result=false;
1700483877
1700483878
String name=user.getName();
1700483879
1700483880
//替换掉%后的干净字符串
1700483881
1700483882
String str=likeStr.replace(”%”,””);
1700483883
1700483884
//是以名字开头,如’国庆%’
1700483885
1700483886
if(likeStr.endsWith(LIKE_FLAG)&&!likeStr.startsWith(LIKE_FLAG)){
1700483887
1700483888
result=name.startsWith(str);
1700483889
1700483890
}else if(likeStr.startsWith(LIKE_FLAG)&&!likeStr.endsWith(LIKE_FLAG)){//类似’%国庆’
1700483891
1700483892
result=name.endsWith(str);
1700483893
1700483894
}else{
1700483895
1700483896
result=name.contains(str);//类似于’%国庆%’
1700483897
1700483898
}
1700483899
[
上一页 ]
[ :1.70048385e+09 ]
[
下一页 ]