JavaScript设计模式学习之代理模式

107 阅读2分钟

定义

代理模式是为了一个对象提供一个占位符,以便控制对它的访问。

使用场景

提到使用场景,我们能想到第一个反应就是:科学上网。如果是更生活场景一些,那就是代理人,中间商。

从以上场景中,我们就可以看出代理模式的首要条件:代理与本体的一致性。拿上网举例子:对于用户来说,用户只需要输入真实本体的网址就可以正常加载,代理在这里的作用对用户来说是透明的。放到我们实际开发设计中就要满足接口一致性原则。

实现方式

看到代理模式的第一眼,我就想起了以前看过的有关卖牛的电影情节,买家与卖家之间隔了一个中介,双方隔着中介进行报价。这不就是符合了我们学习的代理模式。我们可以用这个为例子进行代码演示

var goods = {
    goodsName: 'cow',
    goodsAge: 2,
    kg: 300,
    price: 5000
}

var agent = new Proxy(goods, {
    get: function(target, key){
        // 这里key必须与goods对象中的key一致,体现了一致性原则,如果不一致就出问题了。
        if(key === 'price'){
            // 这里返回的是代理人的价格,买家是看不到真实的价格。
            return 6000
        }
        return target[key]
    },
    set: function(target, key, value){
        if(key === 'bid'){
            if(value < 6000){
                console.log('不行,太少了!')
                return false
            }else{
                target[key] = value
                console.log('成交,我小亏一点让给你了')
                return value
            }
        }
    }
})

console.log(agent.goodsName) // cow
console.log(agent.goodsAge) // 2
agent.bid = 5000 // 不行,太少了!
console.log(agent.price) //6000
agent.bid = 6000 // 成交,我小亏一点让给你了

总结

代理模式其实并不难,它的设计原则只要满足:代理类和本体类分离,隔开本体类和使用者就可以了