【風(fēng)趣的解釋】
Builder Mode
有時(shí)候帶著MM去約會(huì)瘪贱,KFC可能也是一個(gè)不錯(cuò)的約會(huì)地點(diǎn)锚烦,進(jìn)去我們常常點(diǎn)上兩個(gè)套餐沽甥,然后很happy的聊上一兩個(gè)小時(shí)桶蝎。有沒有發(fā)現(xiàn)我們的選的套餐驻仅,都基本上是包括一個(gè)主食谅畅,幾個(gè)輔食登渣,一杯飲料呢?我們選好套餐毡泻,交了錢胜茧,收銀員就把單子交給里面的師傅,然后師傅按照主食、輔食呻顽、飲料的順序把食物放到盤子里(順序可能有所不同雹顺,就暫且假設(shè)他們這樣做吧),這其實(shí)就是一個(gè)建造者模式廊遍。
【正式的解釋】
建造者模式
當(dāng)面臨“一個(gè)復(fù)雜對(duì)象”的創(chuàng)建工作嬉愧,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化喉前,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化没酣,但是將它們組合在一起的算法確相對(duì)穩(wěn)定。
【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."
#服務(wù)生
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.");
}
}
//服務(wù)生
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.
*/