200字
设计模式-代理模式
2022-09-25
2026-04-30

1. 简介

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

1-1. 定义

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

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

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

2. 案例

2.1 买彩票

通常一个代理存在多个模式,并不会进行严格划分

// 玩家:购买者
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);

评论