[英]How to use builder pattern with Spring annotation
我想在我的代码中消除太多的“新”创建。 因此,我决定使用构建器模式。 如果可能的话,我也想利用Spring @Autowired。
public class Car
{
@Autowired
private Radio radio;
@Autowired
private Speaker speaker;
@Autowired
private Engine engine;
private String model;
public Car createCar()
{
radio.add(speaker);
return this;
}
public static class Builder
{
private String model;
public Builder(){}
public Builder model(String model)
{
this.model = model;
return this;
}
}
}
我想使用类似这样的东西。
Car car = new Car.Builder().model("A123").build();
这可能吗?
好的,您可以使用类似的东西并进行一些基本更改。首先,使用默认的自动装配实例制作汽车和制造商,然后在此处更改示例,例如:
卡尔斯
public class Car {
private Radio radio;
private Speaker speaker;
private Engine engine;
public Car(Radio radio, Speaker speaker, Engine engine) {
this.radio = radio;
this.speaker = speaker;
this.engine = engine;
}
public Radio getRadio() {
return radio;
}
public void setRadio(Radio radio) {
this.radio = radio;
}
public Speaker getSpeaker() {
return speaker;
}
public void setSpeaker(Speaker speaker) {
this.speaker = speaker;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
CarBuilder.class
@Component
public class CarBuilder {
@Autowired
private Radio radio;
@Autowired
private Speaker speaker;
@Autowired
private Engine engine;
public CarBuilder setRadio(Radio radio) {
this.radio = radio;
return this;
}
public CarBuilder setSpeaker(Speaker speaker) {
this.speaker = speaker;
return this;
}
public CarBuilder setEngine(Engine engine) {
this.engine = engine;
return this;
}
public Car createCar() {
return new Car(radio, speaker, engine);
}
}
并在您的代码中使用构建器,如下所示
@Component
public class CarMarket {
@Autowired
private CarBuilder carBuilder;
private Car buildStandardCar(){
return carBuilder.createCar();
}
private Car buildStandardCarButDifferentRadio(Radio radio){
return carBuilder.setRadio(radio).createCar();
}
}
我希望这能帮到您 :)
我认为这应该工作:
@Component
public class Car {
@Autowired
private Radio radio;
@Autowired
private Speaker speaker;
@Autowired
private Engine engine;
private String model;
}
然后是一个构建器类:
@Component
public class CarBuilder{
@Autowired
Car car;
public void addModel(String model){
this.car.setModel(model);
}
public Car getCar(){
return car;
}
}
然后上课
class Main{
public static void main(String args[]){
Car car= context.getBean("carBuilder").addModel("abc").getCar();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.