## 1. 定義
>建造者模式(Builder Pattern)是指將一個復雜對象的構建過程與它的表示分離,使得同樣的構建過程可以創建不同的表示。
建造者模式通常包括下面幾個角色:
1、Builder:給出一個抽象接口,以規范產品對象的各個組成成分的建造。這個接口規定要實現復雜對象的哪些部分的創建,并不涉及具體的對象部件的創建。
2、ConcreteBuilder:實現Builder接口,針對不同的商業邏輯,具體化復雜對象的各部分的創建。在建造過程完成后,提供產品的實例。
3、Director:調用具體建造者來創建復雜對象的各個部分,在指導者中不涉及具體產品的信息,只負責保證對象各部分完整創建或按某種順序創建。
4、Product:要創建的復雜對象。
## 2. 場景
>1、我們寫實體類時,總會加上get、set方法,若屬性很多是一件很麻煩的事情;若使用Lombok插件可以省去get、set的顯示設置,如 @Data 、@Builder等注解,其中@Builder注解使用了建造者模式構建鏈式調用。
2、**去肯德基,漢堡、可樂、薯條、炸雞翅等是不變的,而其組合是經常變化的,生成出所謂的"套餐"。**
## 3. 案例
>以游戲開發中人物的構造過程為例。在游戲中創建一個形象時,需要對每個部位進行創建。簡化而言,需要創建頭部,身體和四肢。
**`實現步驟思路:`**
>1.創建一個Person? bean對象設置屬性和生成get set方法
2.創建一個PersonBuilder接口關鍵有一個返回Person的抽象方法BuilderPersion ,和void?builderHead();
創建頭、身體、腳抽象方法
3.實現PersonBuilder接口ManBuilder 類中有一個Person屬性,構造方法進行new對象,實現接口方法進行創建賦值。
**`代碼結構:`**

>`建立一個人物對象Person`
```java
@Data
public?class?Person?{
private?String?head;
private?String?body;
private?String?foot;
}
```
>`Builder(給出一個抽象接口,以規范產品對象的各個組成成分的建造。`
`這個接口規定要實現復雜對象的哪些部分的創建,并不涉及具體的對象部件的創建)`
```java
public?interface?PersonBuilder {
void?builderHead();
void?builderBody();
void?builderFoot();
Person BuilderPerson();?//組裝
}
```
>`ConcreteBuilder(實現Builder接口,針對不同的商業邏輯,具體化復雜對象的各部分的創建。`
`在建造過程完成后,提供產品的實例)`
```
public class ManBuilder implements PersonBuilder {
private Person person;
public ManBuilder() {
person = new Person();//創建一個Person實例,用于調用set方法
}
public void builderHead() {
person.setHead("建造者頭部分");
}
public void builderBody() {
person.setBody("建造者身體部分");
}
public void builderFoot() {
person.setFoot("建造者頭四肢部分");
}
public Person BuilderPersion() {
return person;
}
}
```
>` Director(調用具體建造者來創建復雜對象的各個部分,在指導者中不涉及具體產品的信息,`
`只負責保證對象各部分完整創建或按某種順序創建)`
```
public class PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.builderHead();
pb.builderBody();
pb.builderFoot();
return pb.BuilderPersion();
}
public static void main(String[] args) {
PersonDirector pb = new PersonDirector();
Person person = pb.constructPerson(new ManBuilder());
System.out.println(person.getHead());
System.out.println(person.getBody());
System.out.println(person.getFoot());
}
}
```
## 4. 總結
```
1、需要生成的對象具有復雜的內部結構。
2、需要生成的對象內部屬性本身相互依賴。
與工廠模式的區別是:建造者模式更加關注與零件裝配的順序。
```
- 前言
- 第一章 設計七大原則
- 第1節 開閉原則
- 第2節 依賴倒置原則
- 第3節 單一職責原則
- 第4節 接口隔離原則
- 第5節 迪米特法則
- 第6節 里氏替換原則
- 第7節 合成復用原則
- 第二章 簡單工廠模式
- 第1節 使用場景
- 第2節 示例代碼
- 第三章 創建者模式
- 第1節 工廠方法模式
- 第2節 抽象工廠模式
- 第3節 建造者模式
- 第4節 原型模式
- 第5節 單例模式
- 第四章 結構型模式
- 第1節 適配器模式
- 第2節 橋接模式
- 第3節 組合模式
- 第4節 裝飾者模式
- 第5節 外觀模式
- 第6節 享元模式
- 第7節 代理模式
- 第五章 行為模式
- 第1節 責任鏈模式
- 第2節 命令模式
- 第3節 迭代器模式
- 第4節 中介者模式
- 第5節 備忘錄模式
- 第6節 觀察者模式
- 第7節 狀態模式
- 第8節 策略模式
- 第9節 模板方法模式
- 第10節 訪問者模式
- 第11節 解釋器模式