您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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); }
Specification接口定義了isSatisfiedBy、and、or、not方法
/** * 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); } }
AbstractSpecification聲明實現(xiàn)Specification,它實現(xiàn)了and、or、not方法
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); } }
AndSpecification繼承了AbstractSpecification,它定義了spec1、spec2屬性,其isSatisfiedBy返回的是spec1.isSatisfiedBy(t) && spec2.isSatisfiedBy(t)
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); } }
OrSpecification繼承了AbstractSpecification,它定義了spec1、spec2屬性,其isSatisfiedBy返回的是spec1.isSatisfiedBy(t) || spec2.isSatisfiedBy(t)
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); } }
NotSpecification繼承了AbstractSpecification,它定義了spec1屬性,其isSatisfiedBy返回的是!spec1.isSatisfiedBy(t)
dddsample-core的Specification接口定義了isSatisfiedBy、and、or、not方法;AndSpecification、OrSpecification、NotSpecification繼承了AbstractSpecification,實現(xiàn)了Specification接口。
以上就是dddsample-core中Specification有什么用,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。