建造者模式是相對比較簡單的一種設計模式,屬於建立型模式的一種;定義:將一個複雜的對象分解成多個簡單的對象來進行構建,將複雜的構建層與表現層分離,使相同的構建過程能夠建立不一樣的表示模式。html
簡單例子來講:當咱們在外面飯店吃飯時,好比點個水煮肉片,這家店可能會辣一點、那家店可能會鹹一點、對面那家可能放青菜、隔壁那家可能放菠菜,每家店作出來的都不同,明明都是水煮肉片卻有不一樣的作法,若是都同樣就不會說這家難吃那家好吃了。那再看KFC,咱們點個漢堡,全部人無論在哪一個城市哪家店,作法、味道都是同樣的,爲何呢,由於它用料、時間、溫度等等都是嚴格規定的,咱們只須要下訂單就好了,這就是一個建造者模式。ajax
建造者模式的主要角色以下:設計模式
建造者模式結構圖以下:markdown
1. 建造者模式咱們在代碼中常常用到,好比Jquery中的ajax請求:ui
//1 用戶發送一個請求
//2 $.ajax建造者模式(指揮者)
//3 具體實現 (建造者)
$.ajax({
url:'www.juejin.cn',
success:function(argument){ }
});
複製代碼
2.其中主要流程實現:this
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
</body>
<script>
//商店:Director指揮者類
function KFCShop() {
this.construct = function(builder) {
builder.step1();
builder.step2();
return builder.get();
}}
//漢堡包製做:建造者類
function HamburgerBuilder() {
this.bread = null;
this.step1 = function() {
this.bread = new Hamburger();
};
this.step2 = function() {
this.bread.addQuantity();
};
this.get = function() {
return this.bread;
};
}
//薯條製做:建造者類
function FrenchFriesBuilder() {
this.fries = null;
this.step1 = function() {
this.fries = new FrenchFries();
};
this.step2 = function() {
this.fries.addQuantity();
};
this.get = function() {
return this.fries;
};
}
//產品類:漢堡包
function Hamburger() {
this.quantity = 1;
this.addQuantity = function() {
this.quantity = 6;
};
this.say = function() {
log.add("我要" + this.quantity + "個漢堡包!");
};
}
//產品類:薯條
function FrenchFries() {
this.quantity = 1;
this.addQuantity = function() {
this.quantity = 2;
};
this.say = function() {
log.add("我要" + this.quantity + "份薯條!");
};
}
// 日誌打印
var log = (function() {
var log = "";
return {
add: function(msg) {
log += msg + "\n";
},
show: function() {
alert(log);
log = "";
}
}
})();
//運行程序
function run() {
var shop = new KFCShop();
var hamBuilder = new HamburgerBuilder();
var friesBuilder = new FrenchFriesBuilder();
//顧客經過向商店下訂不一樣的飲食套餐,獲得不一樣的美食
var hamburgerOrder = shop.construct(hamBuilder);
var friesOrder = shop.construct(friesBuilder);
hamburgerOrder.say();
friesOrder.say();
log.show();
}
run();
</script>
</html>
複製代碼
3、模式的應用url
2.優勢 spa
3.缺點設計