概要
- 建造者模式属于创造型
- Builder模式可以将一个类的构建和表示进行分离
将一个复杂的对象的构建与它的表示分离,使
得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。
经典模式
@Dataclass Computer {private String cup;private String gpu;private String disk;private String ram;}@Dataabstract 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();}@Overridevoid setCup() {computer.setCup("8G");}@Overridevoid setGpu() {computer.setGpu("4G");}@Overridevoid setDisk() {computer.setDisk("1T");}@Overridevoid setRam() {computer.setRam("16G");}@OverrideComputer getComputer() {return computer;}}class TowerComputerBuilder extends ComputerBuilder {private Computer computer;public TowerComputerBuilder() {this.computer = new Computer();}@Overridevoid setCup() {computer.setCup("4G");}@Overridevoid setGpu() {computer.setGpu("2G");}@Overridevoid setDisk() {computer.setDisk("500G");}@Overridevoid setRam() {computer.setRam("8G");}@OverrideComputer 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);}}
变种模式
@Dataclass 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());}}
