《設計模式》 - 3. 建立者模式( Builder )
Javascript設計模式 - 原文連結
建立者模式 ( Builder ) :
語言 : JavaScript
說明 :
以KFC的套餐為例 ,每種套餐包含(主食 、副食 、飲料)三種食物 , 假設 1 位廚師(Cook)只會製作 1 種套餐(Meal) , 我們需要根據套餐選擇廚師 .
導演類( Dirctor ) :
導演類規定套餐的基本組成 , 分為主食 、副食 、飲料3個部分 .
var Dirctor = cc.Class.extend({
makeMeal: function(Cook){
Cook.createPart1(); //主食
Cook.createPart2(); //副食
Cook.createPart3(); //飲料
}
});
產品類( Meal ) :
var Meal = cc.Class.extend({
Foods: null,
ctor: function(){
this.Foods = new Object();
},
addFoods: function(type, num){
this.Foods[type] = num;
},
showMeal: function(){
console.log(this.Foods);
}
});
建立者類( Cook ) :
// 父類 - 廚師(Cook) 含有三個抽象方法,需要由子類繼承實現
var Cook = cc.Class.extend({
meal: null,
ctor: function(){
this.meal = new Meal();
},
createPart1: function(){
},
createPart2: function(){
},
createPart3: function(){
},
getMeal: function(){
return this.meal;
}
});
//子類 - (廚師A、廚師B), 廚師A、廚師B分別會製作不同的套餐.
var A_Cook = Cook.extend({
createPart1: function(){
this.meal.addFoods("雞肉卷", 2);
},
createPart2: function(){
this.meal.addFoods("薯條", 1);
},
createPart3: function(){
this.meal.addFoods("橙汁", 2);
}
});
var B_Cook = Cook.extend({
createPart1: function(){
this.meal.addFoods("漢堡", 1);
this.meal.addFoods("雞米花", 1);
},
createPart2: function(){
this.meal.addFoods("冰淇淋", 2);
},
createPart3: function(){
this.meal.addFoods("咖啡", 2);
}
});
客戶類( Client ) :
var Client = cc.Class.extend({
buyFoods: function(type){
var cook = this.selectCook(type); //挑選廚師
var dirctor = new Dirctor(); //建立導演類
dirctor.makeMeal(cook); //導演類按照規定指定廚師製作套餐
cook.getMeal().showMeal(); //廚師製作完成
},
selectCook: function(type){
switch (type)
{
case "A":
return new A_Cook();
case "B":
return new B_Cook();
}
}
});
// 客戶 購買套餐
var client = new Client();
client.buyFoods("A");
client.buyFoods("B");
輸出結果 :
優點 :
建立者模式的封裝性很好 , 通常情況下產品類和建立者類是穩定的 , 需求變化時候也很容易修改 , 只需要新增新的建立者 - 廚師(Cook) , 本模式也很好的遵循了open & close 設計原則 .
區別 :
仔細一看建立者模式 和 工廠模式非常類似 , 唯一不同的地方是 建立者模式多出了一個導演類(Dirctor) , 導演類確定了大致的組成框架 , 對於建立更為複雜的物件的情況時 , 可以讓結構變得清晰.
總結 :
總得來說 , 建立型模式的作用都是類似的 , 模式與模式之間肯定是存在相似點的 , 如果要用一句話對建立者模式總結的話 , 那就是 :
如果建立的物件複雜 - 使用工廠模式(Factory)
如果建立的物件非常複雜 - 使用建立者模式(Builder)
相關文章
- 設計模式--建造者模式Builder(建立型)設計模式UI
- Scala 與設計模式(二):Builder 建立者模式設計模式UI
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- Java設計模式----建造者模式(Builder)Java設計模式UI
- 設計模式之-建造者模式-Builder設計模式UI
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift
- 設計模式(五)Builder構建者模式設計模式UI
- Java設計模式之建造者模式(Builder)Java設計模式UI
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- 人人都會設計模式---建造者模式--Builder設計模式UI
- C#設計模式系列:建造者模式(Builder)C#設計模式UI
- JAVA設計模式之 建造者模式【Builder Pattern】Java設計模式UI
- 設計模式:Builder模式概述設計模式UI
- 人人都會設計模式: 07、建造者模式--Builder設計模式UI
- 設計模式的征途—6.建造者(Builder)模式設計模式UI
- 設計模式總結篇系列:建造者模式(Builder)設計模式UI
- Builder設計模式UI設計模式
- 設計模式實戰系列之@Builder和建造者模式設計模式UI
- Java設計模式之builder模式Java設計模式UI
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- 建立模式 03-Builder模式模式UI
- Head First 設計模式筆記 3.裝飾者模式設計模式筆記
- 設計模式-生成器模式Builder設計模式UI
- 【設計模式】- 生成器模式(Builder)設計模式UI
- 【設計模式筆記】(二)- Builder模式設計模式筆記UI
- 3.建立型模式模式
- 一天一個設計模式(三) - 建造者模式(Builder)設計模式UI
- JavaScript 設計模式 : 巧用'工廠模式'和'建立者'模式JavaScript設計模式
- 建造者模式(Builder)模式UI
- Android設計模式探討--Builder模式Android設計模式UI
- Android設計模式探討 Builder模式Android設計模式UI
- 設計模式Builder之惑設計模式UI
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 設計模式十: 生成器模式(Builder Pattern)設計模式UI
- 設計模式、用Delphi實現---->Builder模式 (轉)設計模式UI
- 3.[研磨設計模式筆記]單例模式設計模式筆記單例
- Swift設計模式:3.抽象工廠方法模式Swift設計模式抽象