sequence

This paper mainly studies the Specification of DDDsample-core

Specification

public interface Specification<T> {

  /**
   * Check if {@code t} is satisfied by the specification.
   *
   * @param t Object to test.
   * @return {@code true} if {@code t} satisfies the specification.
   */
  boolean isSatisfiedBy(T t);

  /**
   * Create a new specification that is the AND operation of {@code this} specification and another specification.
   * @param specification Specification to AND.
   * @return A new specification.
   */
  Specification<T> and(Specification<T> specification);

  /**
   * Create a new specification that is the OR operation of {@code this} specification and another specification.
   * @param specification Specification to OR.
   * @return A new specification.
   */
  Specification<T> or(Specification<T> specification);

  /**
   * Create a new specification that is the NOT operation of {@code this} specification.
   * @param specification Specification to NOT.
   * @return A new specification.
   */
  Specification<T> not(Specification<T> specification);
}
Copy the code

Specification The Specification interface defines the isSatisfiedBy, AND, OR, and NOT methods

AbstractSpecification

/** * Abstract base implementation of composite {@link Specification} with default * implementations for {@code and}, {@code or} and {@code not}. */ public abstract class AbstractSpecification<T> implements Specification<T> { /** * {@inheritDoc} */ public abstract boolean isSatisfiedBy(T t); /** * {@inheritDoc} */ public Specification<T> and(final Specification<T> specification) { return new AndSpecification<T>(this, specification); } /** * {@inheritDoc} */ public Specification<T> or(final Specification<T> specification) { return new OrSpecification<T>(this, specification); } /** * {@inheritDoc} */ public Specification<T> not(final Specification<T> specification) { return new NotSpecification<T>(specification); }}Copy the code

AbstractSpecification declaration implements Specification, which implements the AND, OR, and not methods

AndSpecification

public class AndSpecification<T> extends AbstractSpecification<T> { private Specification<T> spec1; private Specification<T> spec2; /** * Create a new AND specification based on two other spec. * * @param spec1 Specification one. * @param spec2 Specification two. */ public AndSpecification(final Specification<T> spec1, final Specification<T> spec2) { this.spec1 = spec1; this.spec2 = spec2; } /** * {@inheritDoc} */ public boolean isSatisfiedBy(final T t) { return spec1.isSatisfiedBy(t) && spec2.isSatisfiedBy(t); }}Copy the code

AndSpecification inherits AbstractSpecification, which defines spec1, spec2 properties, Spec1. IsSatisfiedBy (t) && spec2. IsSatisfiedBy (t)

OrSpecification

public class OrSpecification<T> extends AbstractSpecification<T> { private Specification<T> spec1; private Specification<T> spec2; /** * Create a new OR specification based on two other spec. * * @param spec1 Specification one. * @param spec2 Specification two. */ public OrSpecification(final Specification<T> spec1, final Specification<T> spec2) { this.spec1 = spec1; this.spec2 = spec2; } /** * {@inheritDoc} */ public boolean isSatisfiedBy(final T t) { return spec1.isSatisfiedBy(t) || spec2.isSatisfiedBy(t); }}Copy the code

OrSpecification inherits AbstractSpecification, which defines spec1, spec2 properties, Its isSatisfiedBy returns the spec1. IsSatisfiedBy (t) | | spec2. IsSatisfiedBy (t)

NotSpecification

public class NotSpecification<T> extends AbstractSpecification<T> {

  private Specification<T> spec1;

  /**
   * Create a new NOT specification based on another spec.
   *
   * @param spec1 Specification instance to not.
   */
  public NotSpecification(final Specification<T> spec1) {
    this.spec1 = spec1;
  }

  /**
   * {@inheritDoc}
   */
  public boolean isSatisfiedBy(final T t) {
    return !spec1.isSatisfiedBy(t);
  }
}
Copy the code

NotSpecification extends AbstractSpecification, which defines the spec1 property with isSatisfiedBy returning! spec1.isSatisfiedBy(t)

summary

The Specification interface of DDDsample-core defines the isSatisfiedBy, AND, OR, and NOT methods. AndSpecification, OrSpecification and NotSpecification inherit AbstractSpecification and implement Specification interface.

doc

  • dddsample-core