我有一套不同类型的要评估的规则。每个规则都有不同的统计信息,
我计划根据Builder模式实现它,并使用以下代码段
foreach(Rule rule in Rules){
var result = rule.evaluate();
var message = rule.getMessage(result);
rule.saveMassage(message);
rule.updateDB(result);
}
此处规则是基本类型,每种规则类型都有子类型,其中包含规则的属性。
我的方法好吗?或者更好的方法呢?
答案 0 :(得分:1)
我认为您的解决方案没问题。但是如果你想改进设计,你有两个选择:
1)将此调用序列移动到Rule基类内的方法中。
2)如果不允许修改规则类接口,则需要实现Facade模式以简化规则类的使用。
答案 1 :(得分:0)
首先需要弄清楚Builder模式是什么。根据Head First Design Patterns一书的定义:
Use the Builder Pattern to encapsulate the construction of a product and
allow it to be constructed in steps.
从您的问题描述中我不知道哪些对象是构建规则的“材料”。我建议你改用Decorator模式。
public interface Rule {
public void evaluate();
}
public class RuleType1 implements Rule {
@Override
public void evaluate() {
//Evaluation Logic of Type 1
}
}
public class RuleType2 implements Rule {
@Override
public void evaluate() {
//Evaluation Logic of Type 2
}
}
public class RuleEvaluator implements Rule {
private Rule rule;
public RuleEvaluator(Rule rule) {
this.rule = rule;
}
@Override
public void evaluate() {
// 1. Evaluation logic
this.rule.evaluate();
// 2. Update message
// 3. Update status
// 4. Update database
}
}
public class RuleDemo {
public static void main(String[] args) {
//Get the list of rules
for(Rule rule : rules) {
Rule temp = new RuleEvaluator(rule);
temp.evaluate();
}
}
}