领取优惠卷需要判断很多条件。可以使用责任链模式吗,或者有其他什么设计模式更合适吗

领取优惠卷需要判断很多条件。可以使用责任链模式吗,或者有其他什么设计模式更合适吗

组合模式应该也可以,示例代码如下。

public interface Condition {

    boolean match();

}

public class ConditionA implements Condition{
    @Override
    public boolean match() {
        return false;
    }
}

public class ConditionB implements Condition{

    @Override
    public boolean match() {
        return false;
    }
}

public class ConditionComposite implements Condition {

    private List<Condition> conditions = new ArrayList<>();

    public ConditionComposite(){
        
    }
    public ConditionComposite(List<Condition> conditions) {
        if (conditions != null) {
            this.conditions.addAll(conditions);
        }
    }

    public boolean addCondition(Condition condition) {
        return this.conditions.add(condition);
    }

    @Override
    public boolean match() {
        for (Condition condition : this.conditions) {
            if (!condition.match()) {
                return false;
            }
        }
        return true;
    }
}

public class Test {

    public static void main(String[] args) {
        ConditionComposite conditionComposite = new ConditionComposite();
        conditionComposite.addCondition(new ConditionA());
        conditionComposite.addCondition(new ConditionB());
        System.out.println("是否可以领取优惠券:" + conditionComposite.match());
    }
}