打字猴:1.70048405e+09
1700484050 return new NotSpecification(this);
1700484051
1700484052 }
1700484053
1700484054 //or操作
1700484055
1700484056 public IUserSpecification or(IUserSpecification spec){
1700484057
1700484058 return new OrSpecification(this,spec);
1700484059
1700484060 }
1700484061
1700484062 }
1700484063
1700484064 候选对象是否满足条件是由isSatisfiedBy方法决定的,它代表的是一个判断逻辑,由各个实现类实现。三个与或非操作在抽象类中实现,它是通过直接new了一个子类,如此设计非常符合单一职责原则,每个子类都有一个独立的职责,要么完成“与”操作,要么完成“或”操作,要么完成“非”操作。我们先来看“与”操作规格书,如代码清单37-17所示。
1700484065
1700484066 代码清单37-17 与规格书
1700484067
1700484068 public class AndSpecification extends CompositeSpecification{
1700484069
1700484070 //传递两个规格书进行and操作
1700484071
1700484072 private IUserSpecification left;
1700484073
1700484074 private IUserSpecification right;
1700484075
1700484076 public AndSpecification(IUserSpecification_left,IUserSpecification_right){
1700484077
1700484078 this.left=_left;
1700484079
1700484080 this.right=_right;
1700484081
1700484082 }
1700484083
1700484084 //进行and运算
1700484085
1700484086 @Override
1700484087
1700484088 public boolean isSatisfiedBy(User user){
1700484089
1700484090 return left.isSatisfiedBy(user)&& right.isSatisfiedBy(user);
1700484091
1700484092 }
1700484093
1700484094 }
1700484095
1700484096 通过构造函数传递过来两个需要操作的规格书,然后通过isSatisfiedBy方法返回两者and操作的结果。或规格书和非规格书与此类似,分别如代码清单37-18、37-19所示。
1700484097
1700484098 代码清单37-18 或规格书
1700484099
[ 上一页 ]  [ :1.70048405e+09 ]  [ 下一页 ]