將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離熏矿,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示(ps:簡(jiǎn)單理解隱藏內(nèi)部的建造過(guò)程和細(xì)節(jié)已骇,方便創(chuàng)建復(fù)雜的對(duì)象)
-
UML
-
code
/** * @Desc 水果接口 */ public interface FruitBuilder { /** * 創(chuàng)建水果 */ void createFruit(); /** * 水果顏色 */ void buildColor() ; /** * 水果形狀 */ void buildShape() ; /** * 創(chuàng)建水果 * @return */ Fruit getFruit(); }
@Data public class Fruit { private String name; private String color; private String shape; public Fruit(String name) { this.name = name; } public Fruit() { } }
public class BananaBuilder implements FruitBuilder {
private Fruit fruit;
@Override
public void createFruit() {
this.fruit = new Fruit("香蕉") ;
}
@Override
public void buildColor() {
this.fruit.setColor("紅色");
}
@Override
public void buildShape() {
this.fruit.setShape("圓形");
}
@Override
public Fruit getFruit() {
return fruit;
}
}
public class AppleBuilder implements FruitBuilder {
private Fruit fruit;
@Override
public void createFruit( ) {
this.fruit= new Fruit("蘋果") ;
}
@Override
public void buildColor() {
this.fruit.setColor("藍(lán)色");
}
@Override
public void buildShape() {
this.fruit.setShape("橢圓形");
}
@Override
public Fruit getFruit() {
return fruit;
}
}
public class Soul {
public Fruit createFruit(FruitBuilder fruitBuilder){
fruitBuilder.createFruit();
fruitBuilder.buildColor();
fruitBuilder.buildShape();
return fruitBuilder.getFruit();
}
}
public class Main {
public static void main(String[] args) {
Soul soul = new Soul();
//蘋果
System.out.println("生產(chǎn)了:" + soul.createFruit(new AppleBuilder()));
System.out.println("----------------------------------------");
//香蕉
System.out.println("生產(chǎn)了:" + soul.createFruit(new BananaBuilder()));
}
}
建造者模式與工廠模式類似,但是建造者模式能應(yīng)對(duì)更加復(fù)雜的創(chuàng)建過(guò)程票编。