【風趣的解釋】
Builder Mode
有時候帶著MM去約會,KFC可能也是一個不錯的約會地點,進去我們常常點上兩個套餐,然后很happy的聊上一兩個小時。有沒有發現我們的選的套餐,都基本上是包括一個主食,幾個輔食,一杯飲料呢?我們選好套餐,交了錢,收銀員就把單子交給里面的師傅,然后師傅按照主食、輔食、飲料的順序把食物放到盤子里(順序可能有所不同,就暫且假設他們這樣做吧),這其實就是一個建造者模式。
【正式的解釋】
建造者模式
當面臨“一個復雜對象”的創建工作,其通常由各個部分的子對象用一定的算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的算法確相對穩定。
【Python版】
#-*- coding:utf-8 -*-
#套餐A
class MealA(object):
def mainFood(self):
print "main food is ready."
def sideFood(self):
print "side food is ready."
def drink(self):
print "drink is ready."
#套餐B
class MealB(object):
def mainFood(self):
print "main food is ready."
def sideFood(self):
print "side food is ready."
def drink(self):
print "drink is ready."
#服務生
class Waiter(object):
def deliver(self, meal):
meal.mainFood()
meal.sideFood()
meal.drink()
if __name__ == "__main__":
waiter = Waiter()
waiter.deliver(MealA())
"""print out
main food is ready.
side food is ready.
drink is ready.
"""
【JS版】
//套餐A
function MealA(){
}
MealA.prototype = {
mainFood: function(){
console.log("main food is ready.");
},
sideFood: function(){
console.log("side food is ready.");
},
drink: function(){
console.log("drink food is ready.");
}
}
//套餐B
function MealB(){
}
MealB.prototype = {
mainFood: function(){
console.log("main food is ready.");
},
sideFood: function(){
console.log("side food is ready.");
},
drink: function(){
console.log("drink food is ready.");
}
}
//服務生
function Waiter(){
}
Waiter.prototype.deliver = function(meal){
meal.mainFood();
meal.sideFood();
meal.drink();
};
waiter = new Waiter();
waiter.deliver(new MealA());
/*console out
main food is ready.
side food is ready.
drink food is ready.
*/