建造者模式是相对比较简单的一种设计模式,属于建立型模式的一种;定义:将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表现层分离,使相同的构建过程能够建立不一样的表示模式。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.缺点设计