《設計模式》 - 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
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- 設計模式(五)Builder構建者模式設計模式UI
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- 設計模式:Builder模式概述設計模式UI
- 人人都會設計模式: 07、建造者模式--Builder設計模式UI
- Java設計模式之builder模式Java設計模式UI
- 建立模式 03-Builder模式模式UI
- 設計模式實戰系列之@Builder和建造者模式設計模式UI
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- 【設計模式筆記】(二)- Builder模式設計模式筆記UI
- 設計模式-生成器模式Builder設計模式UI
- 【設計模式】- 生成器模式(Builder)設計模式UI
- Head First 設計模式筆記 3.裝飾者模式設計模式筆記
- 一天一個設計模式(三) - 建造者模式(Builder)設計模式UI
- 建造者模式(Builder)模式UI
- 3.建立型模式模式
- 設計模式十: 生成器模式(Builder Pattern)設計模式UI
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 建造者模式(Builder Pattern)模式UI
- Java 高效程式設計之 Builder 模式Java程式設計UI模式
- 【Java】設計模式--建立型模式Java設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 構建者模式(Builder pattern)模式UI
- 設計模式----建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式-建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- 【設計模式(四)】建立型模式--原型模式設計模式原型
- 設計模式-建立型-單例模式設計模式單例
- 設計模式-建立型模式學習設計模式
- Builder 模式UI模式
- 設計模式系列——3.簡單工廠模式與策略模式總結設計模式