Giriş
Kuralları daha kolay kodlamayı sağlayan predicate gibi düşünülebilir.
Örnek
Şöyle yaparız.
Bu predicate'leri and ve or yapma imkanı da var. Şöyle yaparız.public interface Specification<T> {boolean isSatisfiedBy(T t);}public class IsUnderageSpecification extends CompositeSpecification<Discount> {...}public class IsSeniorSpecification extends CompositeSpecification<Discount> {...}public class IsWeekendSpecification extends CompositeSpecification<Discount> {...}
public abstract class CompositeSpecification<T> implements Specification<T> { public CompositeSpecification<T> or(Specification<T> specification) { return new OrSpecification<>(this, specification); } public CompositeSpecification<T> and(Specification<T> specification) { return new AndSpecification<>(this, specification); } public CompositeSpecification<T> not() { return new NotSpecification<T>(this);Kuralımızı yazmak için şöyle yaparız.
} }
public class DiscountSpecification extends CompositeSpecification<Person> { CompositeSpecification<Person> isUnderage = ...; CompositeSpecification<Person> isSenior = ...;
CompositeSpecification<Person> isWeekend = ...;
@Override public boolean isSatisfiedBy(Person person) {
return isUnderage .and(isWeekend) .or(isSenior) .isSatisfiedBy(); } }
Hiç yorum yok:
Yorum Gönder