我对java的构建器设计模式代码有点困惑
我只是想了解这行代码中发生了什么我对java的构建器设计模式代码有点困惑,java,Java,我只是想了解这行代码中发生了什么 Phone ph=new PhoneBuilder().setOs(“安卓”).setRam(“2”).get()以及该行的工作方式。为什么我们在“Phone ph”引用变量中分配两个对象,因为PhoneBuilder类方法返回其对象。对不起,我的英语不好 public class MakePhone { public static void main(String args[]){ Phone ph=new PhoneBuilder().
Phone ph=new PhoneBuilder().setOs(“安卓”).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类可能有许多不同类型的潜在构造函数时,构建器模式非常有用。与通过实际创建许多不同的构造函数来满足这一需求(这可能会成为维护的噩梦)不同,在builder模式中,理论上我们只需要一个构造函数调用。以所讨论的builder代码行为例:
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 ph=new PhoneBuilder()
.setOs(“android”)//设置操作系统并返回对生成器的引用
.setRam(“2”)//设置RAM并返回引用
.get();//给构造器打电话
它等于下面的代码:
PhoneBuilder=newphonebuilder()
builder.setOs(“安卓”)
建造商。setRam(“2”)
Phone ph=新电话(builder.os、builder.ram、builder.storage、builder.processor);
builder模式的优点是,所有设置phone值的过程都是一次性完成的,因此可以避免许多线程安全问题。phone ph=new PhoneBuilder()
.setOs(“安卓”)
.setRam(“2”)
.get();
这段代码使用了一个构建器模式,它是“四人帮”设计模式之一
这是一种非常简洁的逐步构建复杂对象的方法,通常在需要使用相同的对象构建过程构建不同的不可变对象时使用
考虑以下问题,引用自:
想象一个复杂的物体,需要一步一步的努力
许多字段和嵌套对象的初始化。这种初始化
代码通常被隐藏在一个具有大量
参数。甚至更糟糕的是:散布在客户机代码中
构建器模式建议您将对象构造代码从其自己的类中提取出来,并将其移动到称为构建器的单独对象中
以问题中的代码为例,对象构造代码已从Phone
类分离到PhoneBuilder
类中
PhoneBuilder
类使用公共setter方法(即setOs(String os)
,setRam(String ram)
,setStorage(String storage)
,setProcessor(String processor)
)来设置手机的各种属性
每个setter通过这个
指针返回相同的电话
实例,因此可以进行方法链接,即:
Phone ph=new PhoneBuilder().setOs(“安卓”).setRam(“2”).get();
get()
方法初始化并返回一个带有生成器类属性的Phone
实例。因此,它被称为链中的最后一个方法
您可以阅读有关生成器模式(和其他设计模式)的更多信息。
在模式上查找其他示例