规格模式是组合模式的一种扩展,在框架性开发中使用较多(项目级开发很少使用),这里做一个简单的介绍。
这里假设了一个这样一个场景,有一堆的User对象,UserProvider提供查询服务。们来看组合规格书(CompositeSpecification),它是一个抽象类,实现了与或非的操作,如下所示。
- public abstract class CompositeSpecification implements IUserSpecification {
- //是否满足条件有实现类实现
- public abstract boolean isSatisfiedBy(User user);
- //and操作
- public IUserSpecification and(IUserSpecification spec) {
- return new AndSpecification(this,spec);
- }
- //not操作
- public IUserSpecification not() {
- return new NotSpecification(this);
- }
- //or操作
- public IUserSpecification or(IUserSpecification spec) {
- return new OrSpecification(this,spec);
- }
- }
候选对象是否满足条件是由isSatisfiedBy方法决定的,它代表的是一个判断逻辑,由各个实现类实现。三个与或非操作在抽象类中实现,它是通过直接new了一个子