首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中使用数百个if else实现业务规则的设计模式

在java中使用数百个if else实现业务规则的设计模式
EN

Stack Overflow用户
提问于 2013-05-31 12:15:48
回答 5查看 61.3K关注 0票数 36

我必须用数百行下面的代码来实现某些业务规则

代码语言:javascript
复制
if this
      then this
else if
      then this
.
. // hundreds of lines of rules
 else
      that

我们是否有任何设计模式可以有效地实现这一点,或者重用代码,以便它可以应用于所有不同的规则。我听说过Specification Pattern,它创建了下面这样的东西

代码语言:javascript
复制
public interface Specification {

boolean isSatisfiedBy(Object o);

Specification and(Specification specification);

Specification or(Specification specification);

Specification not(Specification specification);
}


public abstract class AbstractSpecification implements Specification {

public abstract boolean isSatisfiedBy(Object o);

public Specification and(final Specification specification) {
 return new AndSpecification(this, specification);
}

public Specification or(final Specification specification) {
 return new OrSpecification(this, specification);
}

 public Specification not(final Specification specification) {
 return new NotSpecification(specification);
}
}

然后实现Is,And,Or方法,但我认为这不能避免我编写if else(可能是我的理解不正确)……

有没有最好的方法来实现有这么多if else语句的业务规则?

编辑:只是一个示例。A,B,C等都是class.Apart的属性。还有很多类似的其他规则。我想为这个做一个泛型代码。

代码语言:javascript
复制
    If <A> = 'something' and <B> = ‘something’ then
    If <C> = ‘02’ and <D> <> ‘02’ and < E> <> ‘02’  then
        'something'
    Else if <H> <> ‘02’ and <I> = ‘02’ and <J> <> ‘02’  then
        'something'
    Else if <H> <> ‘02’ and <I> <> ‘02’ and <J> = ‘02’  then
        'something'
    Else if <H> <> ‘02’ and <I> = ‘02’ and <J> = ‘02’  then 
        'something'
    Else if <H> = ‘02’ and <I> = ‘02’ and <J> <> ‘02’  then 
        'something'
    Else if <H> = ‘02’ and <I> <> ‘02’ and <J> = ‘02’  then 
        'something'
    Else if <H> = ‘02’ and <I> = ‘02’ and <J> = ‘02’  then:
        If <Q> = Y then
            'something'
        Else then 
            'something'
Else :
Value of <Z>
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16849656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档