构造器模式,也被称为建造者、生成器模式,是设计模式中比较容易理解的模式之一。
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
package com.designpattern;
public class BuilderPatternDemo {
public static void main(String[] args) {
User user = new User();
System.out.println("在设置age之前进行复杂的校验逻辑");
user.setAge("1");
System.out.println("在设置name之前进行复杂的校验逻辑");
user.setName("xx");
System.out.println("在设置male之前进行复杂的校验逻辑");
user.setSex("male");
// 上面是简化的一个逻辑,实际上对于一些有几个个字段,甚至上百个字段的复杂对象的构建
// 上面那段代码会极度膨胀,非常复杂
// 一个是说,大量代码堆积在一起,维护性非常差,可读性非常差,一堆代码
User user1 = new User.User1Builder()
.Age("1")
.Name("xx")
.Sex("male")
.builder();
User user2 = new User.User2Builder()
.Age("1")
.Name("xx")
.Sex("male")
.builder();
}
public static class User {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getAge() {
return age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public static abstract class UserBuilder {
protected User user;
public UserBuilder() {
user = new User();
}
public UserBuilder Name(String name) {
user.setName(name);
return this;
}
public UserBuilder Age(String age) {
user.setAge(age);
return this;
}
public UserBuilder Sex(String sex) {
user.setSex(sex);
return this;
}
public User builder() {
return user;
}
}
public static class User1Builder extends UserBuilder {
public User builder() {
System.out.println("进行复杂的字段逻辑校验1");
return user;
}
}
public static class User2Builder extends UserBuilder {
public User builder() {
System.out.println("进行复杂的字段逻辑校验2");
return user;
}
}
}
}