建造者模式的定义
将一个复杂对象的构建和它所要的表示分离开来,这样的话,就可以使得同样的构建过程就可以创
建不同的表示。
什么是复杂的对象?
一个类的构造函数参数超过4个,而且这些参数有些是可选的,我们要创建这个类的对象就需要设置不同的构造函数。
public class Computer {
private String cpu;
private String power;
private String fan;
private String display;//可选
private String keyword;//可选
}
构造函数
使用场景
当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。
链式方法实现
- 创建Computer类,定义5中属性,在Computer类内部定义静态内部类Builder,它拥有和Computer一样的属性。
- 在Builder中编写set方法,完成属性赋值,同时方法的返回值为Builder。
- 在Computer中创建一个private的构造函数,参数为Builder类型,由Builder来完成Computer属性的赋值。
- 在Builder内编写builder方法来创建Computer对象。
public class Computer {
private String cpu;
private String power;
private String fan;
private String display;
private String keyword;
private Computer(Builder builder){
this.cpu=builder.cpu;
this.power=builder.power;
this.fan=builder.fan;
}
public static class Builder{
private String cpu;
private String power;
private String fan;
private String display;
private String keyword;
public Builder (String display,String keyword){
this.display=display;
this.keyword=keyword;
}
public Builder setCpu(String cpu) {
this.cpu = cpu;
return this;
}
public Builder setPower(String power) {
this.power = power;
return this;
}
public Builder setFan(String fan) {
this.fan = fan;
return this;
}
Computer builder(){
return new Computer(this);
}
}
}
测试
public class Main {
public static void main(String[] args) {
Computer computer = new Computer.Builder("","").setCpu("英伟达")
.setFan("双轮风扇")
.setPower("极品电源")
.builder();
System.out.println(computer);
}
}
https://zhuanlan.zhihu.com/p/58093669