java - 如何在 Builder 设计模式中实现方法的条件可见性?

标签 java design-patterns

如何更改 Builder 设计模式中方法的可见性?
例如我有这个 Builder :

public class Builder {

    public Builder a() {
        //
        return this;
    }

    public Builder b() {
        //
        return this;
    }

}
用户可以使用 API 并执行以下操作:
new Builder().a().b();
new Builder().a();
new Builder().b();
new Builder().b().a();
我要让他访问方法b()仅当 a()被称为:
new Builder().a().b();
new Builder().a();
一个简单的例子可能是 SQL 请求构建器。你不应该被允许拨打 when()之前 select() .
怎么做?

最佳答案

如果我正确理解你的问题,你可以这样做:

public class Builder {
    
    private boolean aProcessed;
    
    public Builder() {
        this.aProcessed = false;
    }

    public Builder a() {
        //
        aProcessed = true;
        return this;
    }

    public Builder b() throws IllegalAccessException {
        if (!aProcessed) {
            throw new IllegalAccessException();
        }
        //
        return this;
    }

}

关于java - 如何在 Builder 设计模式中实现方法的条件可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69692600/

相关文章:

java - 为什么消费者在使用 Java 客户端 API 在 DC/OS 上使用来自 Kafka 的消息时挂起?

node.js - 我应该在 Controller 和域服务之间放置命令总线吗?

c# - 为什么要使用 builder 模式?

MVC 架构中的 iOS Singleton 类

c# - 今天、本周、本月流行——设计模式

java - JCIFS verifyError 非法使用非虚函数调用

java - 如何使用三元运算符缩短此代码?

java - .Net 客户端 - 使用 tls1.2 的 Java 服务器连接问题

java - 在java hashMap中添加键值对

Python:使用 "..%(var)s.."% locals() 是一个好习惯吗?