关于建造者模式的表现

About performance of builder pattern

为了测试可读性和易写性,我通常在我的值对象中使用BuilderPattern。例如,不是以标准方式编写这个简单的 class:

public class MyClass{

    private String myProperty;

    public void setMyProperty(String myProperty){
       this.myProperty = myProperty;
    }
}

我比较喜欢这样写:

public class MyClass{

    private String myProperty;

    public MyClass setMyProperty(String myProperty){
       this.myProperty = myProperty;
       return this;
    }
}

这种方法会对性能产生不良影响吗?

您的代码片段不是关于使用构建器模式 (GoF/Bloch),它只是关于使用 fluent mutatorschain setters。没有实际性能影响的常见做法。

关于构建器,您有额外的构建器对象。但是在创建对象后直接有资格进行垃圾收集。

因此您可能会对内存使用产生一些影响。但是 JVM 确实针对处理这个问题进行了优化。

那不是建筑商,建筑商应该是

public class MyClass { // My attrs are immutable now

    private final String myProperty;

    public MyClass(String myProperty) {
        this.myProperty = myProperty;
    }

    // don't add if you don't need
    public String getMyProperty() {
        return myProperty;
    }

    public static class Builder{
        private String myProperty;
        
        public MyClass build(){
            return new MyClass(myProperty);
        }

        public Builder setMyProperty(String myProperty) {
            this.myProperty = myProperty;
            return this;
        }
    }

    public static void main(String[] args) {
        new MyClass.Builder()
                .setMyProperty("MyValue")
                .build();
    }
}

这与性能无关,它即将移动构建器上的可变性并使您的模型不可变:现在您只有二传手在构建器级别。