JAVA設計模式之建造者模式
1.模式的定義
建造者模式構建複雜物件就像造汽車一樣,是一個一個元件一個一個步驟建立出來的,它允許使用者通過制定的物件型別和內容來建立他們,但是使用者並不需要知道這個複雜物件是如何構建的,它只需要明白通過這樣做我可以得到一個完整的複雜物件例項。
2.模式結構
建造者模式主要包含四個角色:
Builder:抽象建造者。它宣告為建立一個Product物件的各個部件指定的抽象介面。
ConcreteBuilder:具體建造者。實現抽象介面,構建和裝配各個部件。
Director:指揮者。構建一個使用Builder介面的物件。它主要是用於建立一個複雜的物件,它主要有兩個作用,一是:隔離了客戶與物件的生產過程,二是:負責控制產品物件的生產過程。
Product:產品角色。一個具體的產品物件。
3.模式實現
KFC裡面一般都有好幾種可供客戶選擇的套餐,它可以根據客戶所點的套餐,然後在後面做這些套餐,返回給客戶的事一個完整的、美好的套餐。下面我們將會模擬這個過程,我們約定套餐主要包含漢堡、薯條、可樂、雞腿等等組成部分,使用不同的組成部分就可以構建出不同的套餐。
實驗程式碼:
package Builder;
public class Meal {
private String food;
private String drink;
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public String getDrink() {
return drink;
}
public void setDrink(String drink) {
this.drink = drink;
}
}
套餐構造器:MealBuilder.java
package Builder;
public abstract class MealBuilder {
Meal meal = new Meal();
public abstract void buildFood();
public abstract void buildDrink();
public Meal getMeal(){
return meal;
}
}
然後是套餐A、套餐B。這個兩個套餐都是實現抽象套餐類。
package Builder;
public class MealA extends MealBuilder{
public void buildDrink() {
meal.setDrink("一杯可樂");
}
public void buildFood() {
meal.setFood("一盒薯條");
}
}
package Builder;
public class MealB extends MealBuilder{
public void buildDrink() {
meal.setDrink("一杯檸檬果汁");
}
public void buildFood() {
meal.setFood("三個雞翅");
}
}
最後是KFC的服務員,它相當於一個指揮者,它決定了套餐是的實現過程,然後給你一個完美的套餐
package Builder;
public class KFCWaiter {
private MealBuilder mealBuilder;
public void setMealBuilder(MealBuilder mealBuilder) {
this.mealBuilder = mealBuilder;
}
public Meal construct(){
//準備食物
mealBuilder.buildFood();
//準備飲料
mealBuilder.buildDrink();
//準備完畢,返回一個完整的套餐給客戶
return mealBuilder.getMeal();
}
}
測試類
package Builder;
public class Client {
public static void main(String[] args) {
//服務員
KFCWaiter waiter = new KFCWaiter();
//套餐A
MealB a = new MealB();
//服務員準備套餐A
waiter.setMealBuilder(a);
//獲得套餐
Meal mealA = waiter.construct();
System.out.print("套餐B的組成部分:");
System.out.println(mealA.getFood()+"---"+mealA.getDrink());
}
}
我們可以使用工廠模式建造更多的套餐,然後使用建造者模式讓人們選擇不同的套餐。
相關文章
- Java設計模式之(三)——建造者模式Java設計模式
- 折騰Java設計模式之建造者模式Java設計模式
- java設計模式-建造者模式Java設計模式
- 設計模式之【建造者模式】設計模式
- 設計模式之建造者模式設計模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- Java 設計模式(二)《建造者模式》Java設計模式
- golang設計模式之建造者模式Golang設計模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI
- 設計模式----建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式-建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 嘻哈說:設計模式之建造者模式設計模式
- 設計模式 --建類神器之建造者模式設計模式
- 設計模式-建造者模式(Builder)設計模式UI
- 重學 Java 設計模式:實戰建造者模式Java設計模式
- java23種設計模式——五、建造者模式Java設計模式
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- 設計模式實戰 - 建造者模式設計模式
- GoLang設計模式01 - 建造者模式Golang設計模式
- 極簡設計模式-建造者模式設計模式
- 設計模式實戰系列之@Builder和建造者模式設計模式UI
- 設計模式 #3 (原型模式、建造者模式)設計模式原型
- Java建造者模式Java模式
- 設計模式【4】-- 建造者模式詳解設計模式
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift
- Java進階篇設計模式之三 ----- 建造者模式和原型模式Java設計模式原型
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- 設計模式快速學習(四)建造者模式設計模式
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- JavaScript設計模式系列二之建造者模式(附案例原始碼)JavaScript設計模式原始碼
- Java設計模式之建造者模式(光頭強買電鋸引發的思考)Java設計模式
- Java 設計模式之《觀察者模式》Java設計模式
- Java設計模式之裝飾者模式Java設計模式
- 設計模式:建造者模式及在jdk中的體現,建造者模式和工廠模式區別設計模式JDK