java - 我对java的Builder Design模式代码有点困惑

标签 java

我只是想了解这行代码发生了什么 Phone ph=new PhoneBuilder().setOs("android").setRam("2").get(); 以及该行的工作原理。以及为什么我们在“Phone ph”引用变量中分配两个对象,因为 PhoneBuilder 类方法返回其对象。抱歉我的英语不好。

public class MakePhone {
    public static void main(String args[]){
       Phone ph=new PhoneBuilder().setOs("android").setRam("2").get();
       System.out.println(ph);

    }
}


public class Phone {
        String os,ram,storage,processor;


        public Phone(String os, String ram, String storage, String processor){
            this.os=os;
            this.ram=ram;
            this.storage=storage;
            this.processor=processor;
        }

    @Override
    public String toString() {
        return "Os"+os+",Ram"+ram+",Storage"+storage+"Processor"+"" ;
    }
}

public class PhoneBuilder {
    String os,ram,storage,processor;

    public PhoneBuilder setOs(String os) {
        this.os = os;
        return this;
    }

    public PhoneBuilder setRam(String ram) {
        this.ram = ram;
        return this;
    }

    public PhoneBuilder setStorage(String storage) {
        this.storage = storage;
        System.out.println(this);
        return this;
    }

    public PhoneBuilder setProcessor(String processor) {
        this.processor = processor;
        return this;
    }
    public Phone get(){
        return new Phone(os, ram, storage, processor);
    }
}

最佳答案

获取有问题的构建器代码行:

Phone ph = new PhoneBuilder()
    .setOs("android")         // sets the OS and returns a reference to the builder
    .setRam("2")              // sets the RAM and also returns a reference
    .get();                   // calls the constructor for a Phone

我们可以看到,构建器模式的工作原理是首先使用我们想要创建 Phone 对象的所有属性填充 PhoneBuilder POJO 对象。我们通过方法链接以紧凑的方式做到这一点,这是有效的,因为每个构建器 setter 方法都会返回对同一构建器对象的引用。然后,最后,我们调用 get() 创建一个新的 Phone 实例。

当 Java 类可能具有许多不同类型的潜在构造函数时,构建器模式非常有用。与其通过实际创建许多不同的构造函数来满足这一要求,这可能会成为维护的噩梦,而使用构建器模式,我们理论上只需要一次构造函数调用。

关于java - 我对java的Builder Design模式代码有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59798224/

相关文章:

java - 从PHP页面post到Java程序并输出结果

java - Java 中是否有等效的 C++ 析构函数?

java - Spring Boot 应用程序中的 Websocket - 获取 403 Forbidden

java - 在鼠标悬停时检索 JEditorPane 中超链接的标题属性

java - Java项目和Flash项目之间的通信

java - 无法解析符号数据,Lombok,组件,bean,http,util

java - 使用 JAXRS 将 XML 编码为 Restful 服务的 JAVA 对象

java - 哈希md5结果不变

java - 将 ArrayList<String> 添加到 ArrayList<ArrayList<String>>

java - 如何从 firebase 实时数据库检索两个不同的值并使用外部 onDataChange 方法?