规则引擎模式:这种模式的本质是if - else ,拆分if - else每个分支到规则类中,然后,主规则引擎类将保存所有规则并找到与客户端请求匹配的规则。
定义规则类
为了确保所有规则类都实现相同的方法,让我们定义一个每个类都将实现的接口:
<b>public</b> <b>interface</b> AncestorRule { Optional<AncestorResult> evaluate(String selector); }
接下来,让我们定义第一个规则类。该类将保存if - else分支中定义的逻辑:
<b>public</b> <b>class</b> AncestorWithClassRule implements AncestorRule { @Override <b>public</b> Optional<AncestorResult> evaluate(String selector) { <b>if</b> (isCssClass(selector)) { String xpath = format( <font>"ancestor::*[contains(concat(' ', normalize-space(@class), ' '), ' %s ')][%s]"</font><font>, selector.substring(1) ); <b>return</b> Optional.of(<b>new</b> AncestorResult(xpath)); }