总述
建造者模式关注的是具体的过程,创建 的对象比较复杂,需要控制具体的创建过程,比如创建手机,需要控制具体的cpu,内存,磁盘,照相功能,那么这个时候使用建造者模式最为合适
UML图
AbstractPhoneBuilder类为抽象的建造者类,PhoneBuilder为AbstractPhoneBuilder的子类,Phone为相应的手机产品

图片1.png
代码
/**
* 抽象建造者
*/
public abstract class AbstractBuilder {
//phone为建造者要创建的对象
Phone phone;
//设置cpu
abstract AbstractBuilder customCpu(String cpu);
//设置内存
abstract AbstractBuilder customMem(String mem);
//设置磁盘
abstract AbstractBuilder customDisk(String disk);
//设置相机
abstract AbstractBuilder customCam(String cam);
//返回创建好的phone对象
Phone getProduct(){
return phone;
}
}
//具体的实现创建者
public class XiaomiBuilder extends AbstractBuilder{
public XiaomiBuilder(){
phone = new Phone();
}
@Override
AbstractBuilder customCpu(String cpu) {
phone.cpu = cpu;//cpu赋值
//return this是为了使用链式调用
return this;
}
@Override
AbstractBuilder customMem(String mem) {
phone.mem = mem;//内存赋值
return this;
}
@Override
AbstractBuilder customDisk(String disk) {
phone.disk = disk;//磁盘赋值
return this;
}
@Override
AbstractBuilder customCam(String cam) {
phone.cam = cam;//像素赋值
return this;
}
}
@Data
public class Phone {
protected String cpu;
protected String mem;
protected String disk;
protected String cam;
}
public class MainTest {
public static void main(String[] args) {
AbstractBuilder builder = new XiaomiBuilder();
//建造这个手机
// builder.customMem("16G");
// builder.customDisk("1T");
// builder.customCam("2亿");
// builder.customCpu("骁龙8个8");
//链式建造者
Phone phone = builder.customCpu("骁龙8个8")
.customCam("2亿")
.customDisk("1T")
.customMem("16G").getProduct();
System.out.println(phone);
}
}