Java 中断构建器模式

标签 java design-patterns break builder

如果我有一个实现构建器设计模式的类,并且我调用的方法实际上具有相互依赖的操作检查,是否有一种方法可以在某个时刻中断其余方法的执行?

示例

public class Test
{
    public Test checkOne(int one)
    {
        if(someCondition==false)
        {
            //do not continue other builder pattern checks methods (checkTwo)
        }
        return this;
    }

    public Test checkTwo(int two)
    {
        if(someCondition==false)
        {
            //do not continue other builder pattern checks methods (checkThree)
        }
        return this;
    }

    public Test checkThree(int two)
    {
        return this;
    }    
}

最佳答案

您想要的不可能按照您建模的方式实现,因为该方法只能有一种返回类型,无论条件如何(除非您要转换结果)。

此外,对于构建者而言,您所做的事情并没有真正意义。构建器的工作是在构建对象之前收集构建对象所需的数据。在调用构建之前,它不应该对数据执行任何操作。如果您的条件在调用 Check1 和构建最终对象之间发生了变化怎么办?

根据条件的确定方式,您想要的可能会实现。如果您在构建器上设置某些内容来设置此条件,那么您可能可以执行类似以下伪代码的操作:

public class Builder
{
    bool condition=false;
    bool condition2=false;
    int check1 = 0;
    int check2 = 0;

    public ConditionalBuilder WithCondition()
    {
        condition = true;
        return new ConditionalBuilder(this);
    }

    public Builder Check1(int value)
    {
         check1 =value;
         return this;
    }

}

public class ConditionalBuilder : Builder
{
    public ConditionalBuilder Check2(int value)
    {
         check2 = value;
         return this;
    }

    public ConditionalBuilder2 WithCondition()
    {
        condition2 = true;
        return new ConditionalBuilder2(this);
    }

}

public class ConditionalBuilder2 : Builder
{
    public ConditionalBuilder2 Check3(int value)
    {
         check3 = value;
         return this;
    }
}

关于Java 中断构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674644/

相关文章:

java - 在antlr中制作解析树

java - WildFly 8.2.0 (JBOSS) 独立服务器无法启动

ruby-on-rails - 模型和助手中的常用方法

python - 使用 OOP 和代理模式的字符串构造

c# - 为什么 c# 编译器需要在 switch 构造中使用 break 语句?

java - 如何在运行.jar之前运行另一个程序

Java非贪婪(?)正则表达式来匹配字符串

php - 观察者可以观察多个观察者吗?

java - 在 while 循环中比较两个相等的整数时,等于运算符失败?

javascript - 停止自定义事件上的所有嵌套 promise