建造者模式也是一种创建型设计模式,主要用来创建复杂对象(对象的属性比较多),将一个复杂对象的构建与它的表示分离,使得同样的构建构成可以创建不同表示;通常在复杂对象内部设计一个静态内部类作为复杂对象的创建者并使用链式编程来实现;
使用场景:如果一个对象内部有非常复杂的内部结构,也就是很多属性;想把对象的创建和使用分离;
建造者模式和工厂类模式都是创建对象的,但是他们的侧重点不一样,建造者侧重于构建复杂的对象,工厂类模式适用于创建一般对象;
例如Robot机器人有很多属性,就可以使用建造者模式选择性的设置属性:
public class Robot {
private String name;
private String card;
private Integer age;
private char sex;
private String phone;
private Double money;
private String address;
private String hand;
private String head;
private String body;
private String foot;
public void setName(String name) {
this.name = name;
}
public void setCard(String card) {
this.card = card;
}
public void setAge(Integer age) {
this.age = age;
}
public void setSex(char sex) {
this.sex = sex;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setMoney(Double money) {
this.money = money;
}
public void setAddress(String address) {
this.address = address;
}
public void setHand(String hand) {
this.hand = hand;
}
public void setHead(String head) {
this.head = head;
}
public void setBody(String body) {
this.body = body;
}
public void setFoot(String foot) {
this.foot = foot;
}
private Robot() {}
public static class Builder {
private Robot robot = new Robot();
private String name;
private String card;
private Integer age;
private char sex;
private String phone;
private Double money;
private String address;
private String hand;
private String head;
private String body;
private String foot;
public Builder setName(String name) {
robot.setName(name);
return this;
}
public Builder setCard(String card) {
robot.setCard(card);
return this;
}
public Builder setAge(Integer age) {
robot.setAge(age);
return this;
}
public Builder setSex(char sex) {
robot.setSex(sex);
return this;
}
public Builder setPhone(String phone) {
robot.setPhone(phone);
return this;
}
public Builder setMoney(Double money) {
robot.setMoney(money);;
return this;
}
public Builder setAddress(String address) {
robot.setAddress(address);
return this;
}
public Builder setHand(String hand) {
robot.setHand(hand);
return this;
}
public Builder setHead(String head) {
robot.setHead(head);
return this;
}
public Builder setBody(String body) {
robot.setBody(body);
return this;
}
public Builder setFoot(String foot) {
robot.setFoot(foot);
return this;
}
public Robot build() {
return robot;
}
}
public static void main(String[] args) {
Robot build = new Robot.Builder().setName("动感超人").setAge(5).setSex('男')
.setBody("铁布衫").setFoot("飞毛腿").build();
}
}