通用Builder模式设计
BaseBuilder
public abstract class BaseBuilder<B extends BaseBuilder<B, E>, E extends BaseDo> {
protected abstract E build();
}
PeopleBuilder
public abstract class PeopleBuilder<B extends PeopleBuilder<B, E>, E extends BaseDo>
extends BaseBuilder<B, E> {
private String userName;
private int age;
public String getUserName() {
return userName;
}
public int getAge() {
return age;
}
public B userName(String userName) {
this.userName = userName;
return (B) this;
}
public B age(int age) {
this.age = age;
return (B) this;
}
}
UserBuilder
public class UserBuilder extends PeopleBuilder<UserBuilder, UserDo> {
private String city;
public UserBuilder city(String city) {
this.city = city;
return this;
}
public String getCity() {
return city;
}
@Override
public UserDo build() {
return new UserDo(this);
}
}
BaseDo
public class BaseDo<B extends BaseBuilder>{
public BaseDo(B builder){
}
}
UserDo
public class UserDo extends BaseDo<UserBuilder>{
private String userName;
private int age;
private String city;
public UserDo(UserBuilder builder) {
super(builder);
this.age = builder.getAge();
this.userName = builder.getUserName();
this.city = builder.getCity();
}
@Override
public String toString() {
return "UserDo{" +
"userName='" + userName + '\'' +
", age=" + age +
", city='" + city + '\'' +
'}';
}
}
测试类
public class AppTest {
@Test
public void userBuildTest() {
UserBuilder userBuilder = new UserBuilder();
UserDo userDo = userBuilder.age(10)
.userName("hello")
.city("shanghai").build();
System.out.println(userDo);
}
}
测试结果:
UserDo{userName='hello', age=10, city='shanghai'}
Process finished with exit code 0