本文摘自《设计模式就该这样学》1 规范模式的定义规范模式(SpecificationPattern)可以认为是复合模式的扩展。很多时候,程序中的一些条件决定了业务逻辑,可以将这些条件抽取出来,按照一定的关系(AND、OR、NOT)进行组合,从而灵活定制业务逻辑。此外,在查询、过滤等应用中,可以通过预先定义多个条件,然后使用这些条件的组合来处理查询或过滤,而不是使用逻辑判断语句,从而简化整个实现逻辑。这里的每一个条件都是一个规范,多个规范(条件)串联起来形成具有一定逻辑关系的组合规范。规范模式是一种结构设计模式。2 规范模式应用场景规范模式主要适用于以下应用场景。(1)验证对象,检查对象本身是否满足一定的业务需求或是否准备好实现一定的业务目标。(2)从集合中选择满足特定业务规则的对象或对象子集。(3)指定创建新对象时必须满足一定的业务需求。3 SpecificationPattern的UML类图SpecificationPattern的UML类图如下图所示。从上图可以看出,规范模式主要包括6个角色。(1)抽象规范(Specification):规范的抽象定义。(2)复合规范(CompositeSpecification):一般设计为抽象类,对规范进行AND或NOT运算,实现and()、or()、not()方法,并在方法中关联子类,因为子类是固定类,所以可以关联父类。(3)与规范(AndSpecification):对规范进行AND运算,实现isSatisfiedBy()方法。(4)或规范(OrSpecification):对规范执行或操作,实现isSatisfiedBy()方法。(5)NotSpecification(NotSpecification):对规范进行非操作,实现isSatisfiedBy()方法。(6)业务规范(BizSpecification):实现isSatisfiedBy()方法判断业务,一个类就是一个判断方法,可以扩展。4 规范模式的常用写法下面是规范模式的一般写法。publicclassClient{publicstaticvoidmain(String[]args){//待分析的对象List