Skip to content

Instantly share code, notes, and snippets.

@wooklab
Last active January 8, 2021 14:55
Show Gist options
  • Save wooklab/3bb2b0d890c690443259bc675e8e60bb to your computer and use it in GitHub Desktop.
Save wooklab/3bb2b0d890c690443259bc675e8e60bb to your computer and use it in GitHub Desktop.
How to Replace Many if Statements in Java 에서 3.4. Rule Engine 적용버전
/**
* How to Replace Many if Statements in Java(https://www.baeldung.com/java-replace-if-statements)
* - 3.4. Rule Engine 적용버전
*/
public interface Policy<T, R> {
boolean evaluate(T t, PolicyConditions policyConditions);
R apply(T t, PolicyConditions policyConditions);
}
public class SomePolicy implements Policy<SomePolicyHelper, SomeResult> {
@Override
public boolean evaluate(SomePolicyHelper somePolicyHelper, PolicyConditions policyConditions) {
// return 해당 정책 적용여부
}
@Override
public SomeResult apply(SomePolicyHelper somePolicyHelper, PolicyConditions policyConditions) {
// return 정책 반영 결과
}
}
public class PriceInfoProvider {
private final List<Policy> policies;
public SomeResult provide(SomePolicyHelper somePolicyHelper, PolicyConditions policyConditions) {
PriceInfoPolicy priceInfoPolicy = policies
.stream()
.filter(policy -> policy.evaluate(somePolicyHelper, policyConditions))
.findFirst()
.orElseThrow(() -> new RuntimeException(EXCEPTION_MESSAGE));
return priceInfoPolicy.apply(somePolicyHelper, policyConditions);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment