工厂模式
工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。
- 优点:能解决多个相似的问题。
- 缺点:不能知道对象识别的问题(对象的类型)。
1 | function createPerson_Factory(name, age, job) { |
单例模式
确保只有一个实例,并提供全局访问。在JS开发中,经常把用一个对象包裹,这样减少了全局变量的污染,比如 var a = {}。
优点
- 可以用来划分命名空间,减少全局变量的数量
- 使用单体模式可以使代码组织的更为一致,使代码容易阅读和维护
- 可以被实例化,且实例化一次
1 | //实例对象总是在我们调用方法时才被创建,而不是在页面加载好的时候就创建。 |
1 | // 实现单体模式弹窗 |
模块模式
如果我们必须创建一个对象并以某些数据进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么我们这个时候就可以使用模块模式了。
(思路:为单体模式添加私有变量和私有方法能够减少全局变量的使用)
1 | var singleMode = (function(){ |
代理模式
优点
- 代理对象可以代替本体被实例化,并使其可以被远程访问
- 它还可以把本体实例化推迟到真正需要的时候;对于实例化比较费时的本体对象,或者因为尺寸比较大以至于不用时不适于保存在内存中的本体,我们可以推迟实例化该对象
1 | // 先申明一个奶茶妹对象 |
使用虚拟代理实现图片的预加载
策略模式
便于修改1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26// 普通模式
var awardS = function (salary) {
return salary * 4
};
var awardA = function (salary) {
return salary * 3
};
var awardB = function (salary) {
return salary * 2
};
var calculateBonus = function (level, salary) {
if (level === 'S') {
return awardS(salary);
}
if (level === 'A') {
return awardA(salary);
}
if (level === 'B') {
return awardB(salary);
}
};
calculateBonus('A', 10000);
1 | var strategies = { |
职责链模式
优点
消除请求的发送者与接收者之间的耦合。
流程
- 发送者知道链中的第一个接收者,它向这个接收者发送该请求。
- 每一个接收者都对请求进行分析,然后要么处理它,要么它往下传递。
- 每一个接收者知道其他的对象只有一个,即它在链中的下家(successor)。
- 如果没有任何接收者处理请求,那么请求会从链中离开。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33// 我们一般写代码如下处理操作
var order = function(orderType,isPay,count) {
if(orderType == 1) { // 用户充值500元到支付宝去
if(isPay == true) { // 如果充值成功的话,100%中奖
console.log("亲爱的用户,您中奖了100元红包了");
}else {
// 充值失败,就当作普通用户来处理中奖信息
if(count > 0) {
console.log("亲爱的用户,您已抽到10元优惠卷");
}else {
console.log("亲爱的用户,请再接再厉哦");
}
}
}else if(orderType == 2) { // 用户充值200元到支付宝去
if(isPay == true) { // 如果充值成功的话,100%中奖
console.log("亲爱的用户,您中奖了20元红包了");
}else {
// 充值失败,就当作普通用户来处理中奖信息
if(count > 0) {
console.log("亲爱的用户,您已抽到10元优惠卷");
}else {
console.log("亲爱的用户,请再接再厉哦");
}
}
}else if(orderType == 3) {
// 普通用户来处理中奖信息
if(count > 0) {
console.log("亲爱的用户,您已抽到10元优惠卷");
}else {
console.log("亲爱的用户,请再接再厉哦");
}
}
};
1 | //职责链 |