首先根据4要素来确定需要创建哪些类:
1建造的产品 2产品抽象建造方法 3具体建造者 4指挥建造者
1首先定义一个具体的产品
@Data
@Component
public class MobilePhone {
private String color;
private String Brand;
}
2定义一个产品抽象建造方法
public abstract class Builder {
protected abstract void buildColor();
protected abstract void buildBrand();
protected abstract MobilePhone createPhone();
}
3具体的建造者,继承产品建造抽象类
@Component
public class PhoneBuilder extends Builder {
@Autowired
MobilePhone mobilePhone;
@Override
public void buildColor() {
mobilePhone.setColor("石墨色");
}
@Override
public void buildBrand() {
mobilePhone.setBrand("苹果");
}
@Override
protected MobilePhone createPhone() {
return mobilePhone;
}
}
4指挥建造的“人”
@Component
public class Director {
@Autowired
PhoneBuilder phoneBuilder;
public MobilePhone build(){
phoneBuilder.buildColor();
phoneBuilder.buildBrand();
return phoneBuilder.createPhone();
}
}
5调用
@RequestMapping("/builder")
@RestController
@Slf4j
public class BuilderController {
@Autowired
Director director;
@GetMapping("/test")
public void test() {
MobilePhone mobilePhone = director.build();
log.info(mobilePhone.toString());
}
}