张全蛋和李小花的故事——“代理模式”
来源:互联网 发布:php公众号自定义菜单 编辑:程序博客网 时间:2024/04/28 09:10
举个例子:
假设张全蛋喜欢上了李小花,张全蛋准备给李小花送一些礼物,但张全蛋又非常害羞,因此买了礼物之后让王尼玛代送。王尼玛跑到李小花把礼物送给她之后就走了。
那么问题就来了,李小花误以为礼物是王尼玛送的。
在代码世界中也是一样,张全蛋、王尼玛、李小花是三个对象,张全蛋对象中有一个函数:送礼物,王尼玛对象中也有个函数:送礼物,但王尼玛的送礼物函数只是调用了张全蛋的送礼物函数,也就是送礼物函数的真正实现在张全蛋对象中。然后李小花调用了王尼玛对象中的送礼物函数,李小花并不知道张全蛋的存在,误以为送礼物的函数就是王尼玛的。那么王尼玛这个类就是个代理类。
代理模式是什么呢?
若C类要调用A类中的函数,我们不给C类直接调用,而是在A和C类中间增加一个B类,A类和B类都有相同的函数,只不过B类中的函数都是调用A类的,也就是B类的函数并没有实现,然后C类只与B类交互,让C类感受不到A类的存在。
代理模式的本质:
代理类和被代理类需要实现同一个接口,这样他们有共同的函数。函数真正的实现在被代理类中完成,代理类的每一个函数仅仅是调用了被代理类的对应的函数。
代理模式的应用:
1.远程代理。也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理。当需要创建的对象开销很大时,通过代理对象存放需要很长时间实例化的真正对象。
比如:打开一个有很多图片的HTML页面,它很快就会被打开,但一开始里面只有文字,图片只看到框而没有图片,要过一会儿后图片才会被加载。这里图片的框就是一个代理对象。
3.安全代理。用来控制真实对象访问时的权限。
4.智能指引。当调用真实对象前,代理处理另外一些事情。也就是在访问原本对象之前,再附加一些业务处理。
- 张全蛋和李小花的故事——“代理模式”
- 【视频教程】张全蛋与李小花的故事——代理设计模式
- 《管理长歌行》—— 小花狗的错误
- 小花的减肥计划
- 模式的秘密——代理模式
- 模式的秘密——代理模式
- 模式的秘密——代理模式
- Java设计模式之—静态代理和动态代理
- 设计模式——代理模式(理解静态代理和动态代理+代码)
- 小花
- 代理模式—动态代理
- 代理模式 静态代理和动态代理的区别
- Spring的代理模式(静态代理和动态代理)
- Spring的代理模式(静态代理和动态代理)
- java的代理模式(动态代理和静态代理)
- Java 设计模式——静态代理模式和动态代理模式
- 设计模式—静态代理模式和动态代理模式(Proxy Pattern)
- 代理模式之动态代理的实现——CGLib
- c/c++学习的经典网站
- 学会看外面的风景
- 【转】XA事务规范
- Js 代替eval的方法
- python setup.py安装出错: error: Unable to find vcvarsall.bat
- 张全蛋和李小花的故事——“代理模式”
- TQ2440 学习笔记—— 8、自己制作工具链
- HDOJ1556 Color the ball(树状数组)
- CRM_ORDER_MAINTAIN 创建订单简单示例
- Springmvc 访问页面出现404错误
- 华为面试题:查找字母,数字,空格还有其他的个数
- MAVEN常用命令
- CRM_ORDER_MAINTAIN 修改订单简单示例
- 游戏服务器端开发要点