张全蛋和李小花的故事——“代理模式”

举个例子:

假设张全蛋喜欢上了李小花,张全蛋准备给李小花送一些礼物,但张全蛋又非常害羞,因此买了礼物之后让王尼玛代送。王尼玛跑到李小花把礼物送给她之后就走了。

那么问题就来了,李小花误以为礼物是王尼玛送的。

在代码世界中也是一样,张全蛋、王尼玛、李小花是三个对象,张全蛋对象中有一个函数:送礼物,王尼玛对象中也有个函数:送礼物,但王尼玛的送礼物函数只是调用了张全蛋的送礼物函数,也就是送礼物函数的真正实现在张全蛋对象中。然后李小花调用了王尼玛对象中的送礼物函数,李小花并不知道张全蛋的存在,误以为送礼物的函数就是王尼玛的。那么王尼玛这个类就是个代理类。

代理模式是什么呢?

若C类要调用A类中的函数,我们不给C类直接调用,而是在A和C类中间增加一个B类,A类和B类都有相同的函数,只不过B类中的函数都是调用A类的,也就是B类的函数并没有实现,然后C类只与B类交互,让C类感受不到A类的存在。

代理模式的本质:

代理类和被代理类需要实现同一个接口,这样他们有共同的函数。函数真正的实现在被代理类中完成,代理类的每一个函数仅仅是调用了被代理类的对应的函数。

代理模式的应用:

1.远程代理。也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2.虚拟代理。当需要创建的对象开销很大时,通过代理对象存放需要很长时间实例化的真正对象。

比如:打开一个有很多图片的HTML页面,它很快就会被打开,但一开始里面只有文字,图片只看到框而没有图片,要过一会儿后图片才会被加载。这里图片的框就是一个代理对象。

3.安全代理。用来控制真实对象访问时的权限。

4.智能指引。当调用真实对象前,代理处理另外一些事情。也就是在访问原本对象之前,再附加一些业务处理。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-26 22:57:14

张全蛋和李小花的故事——“代理模式”的相关文章

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

谈谈JAVA的代理模式认识 一

一.中介隔离作用 代理模式,第一次接触它,是在学习.Net的时候看的一本书,叫做<大话设计模式>,至今已快三年了.相信看过这本书的同学们,都记得书中的代理模式,就是为他人做嫁衣裳的故事.好,我们回归代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用, 其特征是代理类与委托类有同样的接口,.代理模式是常用的java设计模式. 表现形式如下: 以上一张图就是当初对代理模式的认识.

深入浅出设计模式——代理模式(Proxy Pattern)

模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务.通过引入一个新的对象(如小图片和远程代理对象)来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,这种实现机制即为代理模式,通过引入代理对象来间接访问一个对象,这就是代理模式的模式动机. 模式定义代理模式(Proxy Pattern) :给某一个对象提

23种设计模式--代理模式-Proxy

一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到什么远程代理,虚拟代理等等这一些都是代理模式得具体例子,来个官方定义就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用:下面我们用代购的例子来说明一下这个情况:你想买一台iphone,国行有点贵,然后拜托海外的朋友买一台给你带回来,就是这样的一个例子,首先我们先将买东西这个主题抽象出来,然后再把真实

【大话设计模式】——代理模式

对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate 的继承映射可以理解持久化类之间的继承关系.例如:人和学生之间的关系.学生继承了人,可以认为学生是一个特殊的人,如果对人进行查询,学生的实例也将被得到. Hibernate支持三种继承映射策略: 使用 subclass 进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. 使用 joined-subclass 进行映射: 对于继承关系中的子类使用同一个表

设计模式--代理模式【Proxy Pattern】

什么是代理模式呢? 我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人(真实客户)能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. 比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的: 先定义一种类型的女人: public interface KindWomen { //这种类型的女人能做什么事情呢? public void makeEyesWithMan(); //抛媚眼 p

代理模式(静态代理和动态代理)

一.代理模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 静态代理的一个代理只能代理一种类型,而且是在编译器就已经确定被代理的对象.而动态代理是在运行时,通过反射机制实现动态代理,并且能够代理各种类型的对象. 二.静态代理 由程序员创建或工具生成代理类的源码,再编译代理类.所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了. 静

简单的协议应用-代理模式

协议(protocol): <> 遵守某个协议,只要遵守了这个协议,相当于拥有协议里面的所有方法声明 声明一系列方法 编译器不强求实现协议里所有的方法 分类和协议都只能声明方法,不能声明成员变量 NSObject是基协议 假设一个人要买票,但是他没有空,需要一个代理去帮他问问票价多少啊,还有几张票啊~ 协议TicketDelegate.h,这里指代理所需要拥有的方法. // // TicketDelegate.h // 协议的应用-代理模式 // // Created by Mekor on

从公司买火车票到代理模式和适配器模式

近期看到一些设计模式的文章,自己也有了些想法. 现公司是个爱出差的公司,不可避免要买许多火车票.这个买票的流程一直在变化. 最开始大家都是自己买火车票,然后回公司的时候报销. 就像这样: public class AtFirst { public static void main(String[] args) { EmployeeABuy. Abuy(); //报销 EmployeeBBuy. Bbuy(); //报销 } } class EmployeeABuy{ public static