0.前言
KG、PP被交易到了布鲁克林篮网,我的心情很复杂,一方面为他们不能终老celtics感到惋惜,另一方面为他们能够再次冲击总冠军感到高兴。从07年以来,作为一个铁杆celtics球迷,他们给我带来很多喜怒哀乐,也记载我的青春,不过这一切都会成为历史。
1.代理模式是什么
1.1、代理(proxy)是一个对象,它可以用来控制对另外一个对象的访问;
1.2、代理对象和本体对象实现了同样的接口,并且会把任何方法调用传递给本体对象;
2、应用
2.1、远程代理
代理可以代理本体对象被实例化,并使其可被远程访问。这一个应用自己不是很熟悉,暂时搁置。
2.2、虚拟代理
这是代理用于最多的一种情况。可以将本地的实例化推迟到真正需要的时候,对于实例化比较占用资源的本体,显得非常有用。
//本人较懒,把大叔的例子借用过来,进行了修改来说明虚拟代理如何使用,希望大叔别打我
// 先声明美女对象
var girl = function (name) {
this.name = name;
}; // 这是dudu
var dudu = function (girl) {
this.girl = girl;
this.sendGift = function (gift) {
alert("Hi " + girl.name + ", dudu送你一个礼物:" + gift);
}
}; // 大叔是代理
var proxyTom = function (girl) {
this.girl = girl;
this.du = null;
this._initialize = function(){
if(this.du === null){
this.du = new dude(this.girl)
}
}
this.sendGift = function (gift) {
this._initialize();
this.du.sendGift(gift);
}
}; //调用代理对象
var proxy = new proxyTom(new girl("酸奶小妹"));
proxy.sendGift("999朵玫瑰");
3.与装饰者模式的区别
相同之处:都要对其他对象进行包装,都要事先与被包装对象相同的接口,而且都要把方法调用传递给被包装的对象。
不同之处:一是装饰者会对被包装对象的功能进行修改或扩充,但是代理只不过是控制对它的访问;二是被包装对象的创建方式上:装饰者模式被包装对象的实例化过程完全是独立的,而在代理模式中,被包装对象的实例化是代理的实例化过程的一部分。
4.个人理解总结
1.代理模式是用来对对象进行控制;
2.代理对象和本体对象实现了相同的接口;
3.代理模式主要应用是虚拟代理、远程代理
4.虚拟代理主要面向那些实例化比较占用资源的类,通过虚拟代理可以延迟类的实例化,在需要调用的时候再进行实例化。