1. 简介

代理对象起到类似中介的作用,会增加一些功能(如,校验,合并等等),也会去掉一些原有对象的功能

1-1. 定义

  • 为一个对象提供一种代理以控制对这个对象的访问

1-2. 分类【按职责来划分】

  • 虚拟代理:虚拟代理是把一些开销很大的对象,延迟到真正需要它的时候才去创建执行
  • 安全代理:控制真实对象的访问权限
  • 远程代理(一个对象将不同空间的对象进行局部代理)
  • 智能代理(调用对象代理处理另外一些事情如垃圾回收机制增加额外的服务)

2. 案例

2.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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 玩家:购买者
var bifang = {
buy: function(target) {
var rmb = 10;
target.result(rmb);
}
};

// 代理者:作弊者
var agent = {
buy: function(target) {
this.listen(target,function() {
bifang.buy(target);
})
},
listen: function(target, cb) {
var timer = setInterval(function(){
if(target.probability < 0.3){
cb();
clearInterval(timer);
}
},300);
}
};

//彩票站
var lotteryStation = {
probability : 1,
result: function() {
this.probability < 0.3 ? console.log('恭喜你,中奖了') : console.log('很遗憾,没有中奖');
},
change: function() {
this.probability = Math.random();
},
stare: function() {
var that = this;
that.change();
setInterval(() => {
that.change();
}, 300);
}
};

lotteryStation.stare();

// 自己购买:概率30%
bifang.buy(lotteryStation);

// 代理购买:概率100%
agent.buy(lotteryStation);

__END__