java - c++ 中有效的 java builder 习语等价物?

标签 java c++ design-patterns

自从阅读 Effective Java 以来,这是我一直在使用的一个很好的习惯用法。我一直在努力寻找 C++ 等价物或类似的东西,但运气不佳。 GoF 书中的传统构建器模式并不适用于我的情况。这是一个具有非常困惑的构造函数的复杂对象。下面是 Java 的一个小实现。

class ComplicatedObject {

    private String field1;
    private String field2;
    private int      field3;

    private ComplicatedObject(Builder builder) {

            this.field1 = builder.myField1;
            this.field2 = builder.myField2;
            this.field3 = builder.myField3;

    }

    public static class Builder {

            private String myField1 = "some default";
            private String myField2 = "some other default";
            private int           myField3 = -1;

            public Builder() { }
            public Builder field1(String val) {
                    this.myField1 = val;
                    return this;
            }
            public Builder field2(String val) {
                    this.myField2 = val;
                    return this;
            }
            public Builder field3(int val) {
                    this.myField3 = val;
                    return this;
            }
            public ComplicatedObject build() {
                    return new ComplicatedObject(this);
            }
    }
    public static void main(final String[] args) {
    //built like this

            ComplicatedObject obj = new ComplicatedObject.Builder().field1("blah").field2("lol").field3(4).build();

    }
}

最佳答案

它不仅可以适应 C++,而且这个习语是 C++ 改编而来的。

我想我第一次听说这个习语是在 Java 出现之前。 IIRC Bjarne Stroustrup 在 C++ 第二版中提到了这一点,作为对为什么 C++ 不需要 Smalltalk 风格命名参数的解释。

我的日期可能有误,但这在 C++ 中已经有 15 年了。

编辑:它似乎首先在 C++ 的设计和演化 (6.5.1) 中被描述,在那里它被称为命名函数参数

关于java - c++ 中有效的 java builder 习语等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520250/

相关文章:

c++ - 解释 C++ 中语句和表达式的区别

c++ - 代码依赖文档软件

java - android和php之间的非对称加密

java - 如果一个类有一个内部类并且内部类运行一个线程,那么内部类线程是否彼此共享外部类的相同字段?

java - 扩展包在 OSGi 框架中的含义

c++ - 如何在 C++ 源代码中找到类的实例化?

java - 为什么我们需要 Java 中的接口(interface)?

java - 在Java中的类内部或外部构建复杂对象?

java - 是否有任何设计模式只允许特定类新建其他特定类

design-patterns - 重新哈希 : Accounting Software Design Patterns