概要
- 建造者模式属于创造型
- Builder模式可以将一个类的构建和表示进行分离
将一个复杂的对象的构建与它的表示分离,使
得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。
经典模式
@Data
class Computer {
private String cup;
private String gpu;
private String disk;
private String ram;
}
@Data
abstract class ComputerBuilder {
abstract void setCup();
abstract void setGpu();
abstract void setDisk();
abstract void setRam();
abstract Computer getComputer();
}
class HigherComputerBuilder extends ComputerBuilder {
private Computer computer;
public HigherComputerBuilder() {
this.computer = new Computer();
}
@Override
void setCup() {
computer.setCup("8G");
}
@Override
void setGpu() {
computer.setGpu("4G");
}
@Override
void setDisk() {
computer.setDisk("1T");
}
@Override
void setRam() {
computer.setRam("16G");
}
@Override
Computer getComputer() {
return computer;
}
}
class TowerComputerBuilder extends ComputerBuilder {
private Computer computer;
public TowerComputerBuilder() {
this.computer = new Computer();
}
@Override
void setCup() {
computer.setCup("4G");
}
@Override
void setGpu() {
computer.setGpu("2G");
}
@Override
void setDisk() {
computer.setDisk("500G");
}
@Override
void setRam() {
computer.setRam("8G");
}
@Override
Computer getComputer() {
return computer;
}
}
class Director {
private ComputerBuilder computerBuilder;
public Director(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public Computer createComputerBuilder() {
computerBuilder.setCup();
computerBuilder.setDisk();
computerBuilder.setGpu();
computerBuilder.setRam();
return computerBuilder.getComputer();
}
}
public class Main {
public static void main(String[] args) {
Computer computer = new Director(new HigherComputerBuilder()).createComputerBuilder();
System.out.println("高配:" + computer);
computer = new Director(new TowerComputerBuilder()).createComputerBuilder();
System.out.println("低配:" + computer);
}
}
变种模式
@Data
class Person {
private String name;
private String gender;
private int age;
private double money;
private String house;
}
class PersonBuilder {
private String name;
private String gender;
private int age;
private double money;
private String house;
public PersonBuilder(String name, String gender) {
this.name = name;
this.gender = gender;
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public PersonBuilder money(double money) {
this.money = money;
return this;
}
public PersonBuilder house(String house) {
this.house = house;
return this;
}
public Person build() {
Person person = new Person();
person.setName(name);
person.setAge(age);
person.setGender(gender);
person.setMoney(money);
person.setHouse(house);
return person;
}
}
public class VarietyBuilder {
public static void main(String[] args) {
System.out.println(new PersonBuilder("小明", "man")
.age(11).house("big")
.money(1111111111).build());
}
}