// ======================================================================== // Copyright (C) zeroth Project Team. All rights reserved. // GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 // http://www.gnu.org/licenses/agpl-3.0.txt // ======================================================================== package zeroth.framework.standard.domain; /** * 仕様オブジェクト * <p> * 論理演算をするための値オブジェクトである。ビジネスルールを「述語」的に表現するときに使用する。 * </p> * @param <T> チェック対象オブジェクト型 * @author nilcy */ public abstract class AbstractSpecification<T> implements Specification<T> { /** {@inheritDoc} */ @Override public abstract boolean isSatisfiedBy(T object); /** {@inheritDoc} */ @Override public Specification<T> and(final Specification<T> spec) { return new AndSpecification<>(this, spec); } /** {@inheritDoc} */ @Override public Specification<T> or(final Specification<T> spec) { return new OrSpecification<>(this, spec); } /** {@inheritDoc} */ @Override public Specification<T> not(final Specification<T> spec) { return new NotSpecification<>(spec); } /** {@inheritDoc} */ @Override public Specification<T> xor(final Specification<T> aSpecification) { return new XorSpecification<>(this, aSpecification); } /** {@inheritDoc} */ @Override public Specification<T> nand(final Specification<T> aSpecification) { return new NandSpecification<>(this, aSpecification); } /** {@inheritDoc} */ @Override public Specification<T> nor(final Specification<T> aSpecification) { return new NorSpecification<>(this, aSpecification); } }