打字猴:1.70048375e+09
1700483750 public ArrayList<User>findUser(IUserSpecification userSpec);
1700483751
1700483752 }
1700483753
1700483754 只有一个方法——根据指定的规格书查找用户。再来看其实现类,如代码清单37-10所示。
1700483755
1700483756 代码清单37-10 用户操作
1700483757
1700483758 public class UserProvider implements IUserProvider{
1700483759
1700483760 //用户列表
1700483761
1700483762 private ArrayList<User>userList;
1700483763
1700483764 //传递用户列表
1700483765
1700483766 public UserProvider(ArrayList<User>_userList){
1700483767
1700483768 this.userList=_userList;
1700483769
1700483770 }
1700483771
1700483772 //根据指定的规格书查找用户
1700483773
1700483774 public ArrayList<User>findUser(IUserSpecification userSpec){
1700483775
1700483776 ArrayList<User>result=new ArrayList<User>();
1700483777
1700483778 for(User u:userList){
1700483779
1700483780 if(userSpec.isSatisfiedBy(u)){//符合指定规格
1700483781
1700483782 result.add(u);
1700483783
1700483784 }
1700483785
1700483786 }
1700483787
1700483788 return result;
1700483789
1700483790 }
1700483791
1700483792 }
1700483793
1700483794 程序改动很小,仅仅在if判断语句中根据规格书进行判断,我们持续地扩展规格书,有多少查询分类就可以扩展出多少个实现类,而IUserProvider则不需要任何改动,它的一个方法就覆盖了我们刚刚提出的N多查询路径。我们设计一个场景来看看效果如何,如代码清单37-11所示。
1700483795
1700483796 代码清单37-11 场景类
1700483797
1700483798 public class Client{
1700483799
[ 上一页 ]  [ :1.70048375e+09 ]  [ 下一页 ]