1700484020
1700484021
分析完毕,我们设计出详细的类图,如图37-4所示。
1700484022
1700484023
1700484024
1700484025
1700484026
图37-4 完整规格书类图
1700484027
1700484028
可能大家有很多的疑问,我们先来分析代码,代码分析完毕估计能解决你大部分的疑问。规格书接口如代码清单37-15所示,不再赘述。我们来看组合规格书(CompositeSpecification),它是一个抽象类,实现了与或非的操作,如代码清单37-16所示。
1700484029
1700484030
代码清单37-16 组合规格书
1700484031
1700484032
public abstract class CompositeSpecification implements IUserSpecification{
1700484033
1700484034
//是否满足条件由实现类实现
1700484035
1700484036
public abstract boolean isSatisfiedBy(User user);
1700484037
1700484038
//and操作
1700484039
1700484040
public IUserSpecification and(IUserSpecification spec){
1700484041
1700484042
return new AndSpecification(this,spec);
1700484043
1700484044
}
1700484045
1700484046
//not操作
1700484047
1700484048
public IUserSpecification not(){
1700484049
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
[
上一页 ]
[ :1.70048402e+09 ]
[
下一页 ]