设计模式——代理模式

作者&投稿:祗芸 (若有异议请与网页底部的电邮联系)
~

代理模式(Proxy Pattern)是一个使用率非常高的模式。
定义: Provide a surrogate or placeholder for another object to control access to it. (为其对象提供一种代理以控制这个对象的访问)

代理模式也叫委托模式,它是一项基本的设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常应用中,代理模式可以提供非常好的访问控制。

三个角色的定义

抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。

也叫做被委托的角色、被代理的角色。是业务逻辑的具体执行者。

也叫委托类、代理类。它负责对真实角色的应用,把所以抽象主题定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后工作。

一个代理类可以代理多个被委托者或者被代理者,因此一个代理者具体代理哪个真实主题角色,是由场景类决定的。在通常情况下,一个接口只需要一个代理类就可以了,具体代理哪个实现类由高层模块决定,也就是在代理类的构造函数中传递被代理者。

类似现实生活中买房子的中介,打官司的律师。你不想参与中间过程的是是非非。减轻用户的负担。代理模式使用场景非常多。最典型的是Spring AOP中的动态代理。

普通代理就是我们要知道代理的存在,也就是类似GamePlayerProxy这个代理类的存在,然后才能访问。
普通代理的要求就是客户端只能访问代理角色,而不能访问真实角色。以游戏代练为例子,

GamePlayer的构造函数增加了_gamePlayer参数,而代理角色则只要传入代理者名字即可,而不需要说是替哪个对象做代理

在构造函数中,传来进来一个IGaemPlayer对象,检查谁能创建真实的角色,或者做出别的限制。

仅仅修改了构造函数,传递进来一个代理者名称,即可进行代理,在这种改造下,系统更加简洁,调用者只知道代理的存在就行,不用知道代理了谁。

在该模式下,调用者只知道代理而不知道真实的角色是谁,屏蔽了真实角色的变更对高层模块的影响,真实的主题角色想怎么修改都可以,对高层次的模块没有任何的影响,只要你实现了接口所对应的方法,该模式非常适合对扩展性要求较高的场合。

强制代理是要“强制”,必须通过真实角色查找到代理角色,否则不能进行访问。无论是通过代理类还是直接new一个主题角色类,都不能访问,只有通过真实角色指定的代理类才能访问,也就是说由真实的角色管理代理角色。例如你和一个明星比较熟,你直接找明星帮忙要见导演,但是明星说她比较忙,让你找她的经纪人。你本来想绕过她的代理,谁知道她返回的还是她的代理,这就是强制代理。你可以不知道代理的存在,但是你的所作所为还是需要代理为你提供服务。

强制代理的概念就是要从真实的角色查找到代理角色,不允许直接访问真实角色。高层模块只要调用 getProxy() 就可以访问真实角色的所以方法,它根本不需要产生一个代理出来,代理的管理已经由真实角色自己完成。

一个类可以实现多个接口,完成不同任务的整合。也就是说代理类不仅仅可以实现主题接口,也可以实现其他接口完成不同的任务,而且代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截合过滤。

动态代理



代理模式是一种结构型设计模式,它为其他对象提供一个代理以控制对这个对象的访问。代理对象充当原始对象的代理,可以允许或禁止对原始对象的访问,或者在访问时添加一些额外的逻辑。
代理模式通常用于以下情况:
- 远程代理:控制远程对象的访问
- 虚拟代理:控制对实际对象的访问,如延迟加载等
- 保护代理:控制对对象的访问权限
- 缓存代理:对频繁访问的对象进行缓存,提高性能
代理模式的核心思想是将原始对象封装在代理对象中,客户端无需知道原始对象的真实实现,只需要与代理对象交互即可。
代理模式的优点是:
- 增加了对象的间接性,降低了系统的耦合度
- 可以在不改变原始对象的情况下对其进行控制和扩展
- 提高了系统的性能,特别是对频繁的对象访问进行了缓存
常见的代理模式包括静态代理和动态代理两种。静态代理需要为每个原始对象定义一个代理对象,而动态代理可以在运行时为任意实现了某个接口的对象生成代理对象。
总之,代理模式是一种非常常用的设计模式,可以在很多场合中发挥作用,例如网络代理、安全代理、缓存代理等。


舅舅爆料:魔兽世界国服代理新模式,运营拥有更多自主权,点卡模式或将回...
近日,关于暴雪游戏国服的未来走向,坊间流传着各种猜测。近日,一位备受关注的业界资深人士——我们亲切地称为“舅舅”——再度揭秘,暴雪国服的代理模式可能将迎来重大变革,预示着代理商将获得前所未有的运营自由。舅舅透露,未来的国服代理将不再沿用以往的合资模式,而是回归到九城时代的纯代理分成模式。

箭牌家居定制全新商业模式,赋能加盟商掘金家居定制市场
全新商业模式,强力赋能加盟商 赋能一:高效益、国际化的终端门店模式 在代理模式方面,箭牌家居定制采取“一个城市一个代理”的加盟模式,一店抵多店增加客单值,有效提升投资经济坪效。在终端形象方面,今年箭牌家居定制推出全新的第三代终端门店形象,集时尚、创新、科技、人文和国际化于一体,结合空间...

建设工程项目实施CM承包模式时,代理型合同由( )的计价方式签订。_百 ...
【答案】:A 本题考查的是工程项目发承包模式。代理型和非代理型的CM合同是有区别的。由于代理型合同是业主与分包商直接签订,所以采用简单的成本加酬金合同形式。而非代理型合同则采用保证最大工程费用(GMP)加酬金的合同形式。这是因为CM合同总价是在CM合同签订之后,随着CM单位与各分包商签约而逐步形成...

第三方物流与企业物流管理代理模式有什么区别?
据中国仓储协会最近的一次调查:我国目前的工业企业的物流活动中,全部委托第三方代理的占被调查企业的52%,有 45.3%的企业正在寻找新的物流代理商。由此可以看出:物流外协(Outsourcing)已成为各个国家企业物流管理的主流模式。二、第三方物流的利与弊 当今竞争日趋激化和社会分工日益细化的大背景下,...

人民币结算比例的提高,能带来哪些优势
想要进行人民币结算,其最重要的问题是境外进出口商是否愿意接受人民币,特别是境外进出口商手中有大量的人民币用来支付。二、人民币结算模式 人民币结算主要分为代理模式与清算模式。其中代理模式主要是指中资行委托外资行作为其海外的代理行,境外企业在中资企业的委托行开设人民币账户的模式。清算模式...

meetso代理模式?
在商业上有着独到的眼光和见解。此次强势复出,备受关注,通告不断,频上热搜,在这个时候选择岚泉集团MEETSO作为合作伙伴代言人也是看到了MEETSO的发展潜力以及感受到MEETSO品牌独有魅力。MEETSO是赋予使命的品牌 为爱而生,做为中国国货品牌的佼佼者,创立之初到如今的1年多时间,不仅打响了国内市场名号,...

自己代理一款手游需要多少钱
1. 代理手游的模式决定了所需资金的多少。2. 对于CPS(Cost Per Sale)模式,代理门槛相对较低,费用可忽略不计,通常在500元以内甚至免费。3. 在CPS模式下,代理商负责推广游戏,玩家充值后代理商获得利润。4. 这种模式下,游戏通常包含多种游戏,代理商可以通过观看教程了解具体操作,有疑问时可寻求...

新零售模式设置代理升级条件
升级条件具体如下:1、完成相应的业绩可以晋级,包括首单业绩和累计业绩。2、推荐越多人可以晋级,如社交电商普通店主培育10个店主晋级铂金店主。3、结合业绩和推荐两个条件来晋级。

商业模式三要素主要是什么(2)
如食品行业的龙头企业娃哈哈就采取了这种联销体的商业模式;空调行业巨头格力空调也选择了与区域性代理商合资成立公司共同运营市场,取得了不错的市场业绩。 第四、仓储式商业模式。仓储式商业模式也是很多消费品企业选择商业模式。很多强势品牌基于渠道分级成本很好,制造商竞争能力大幅度下降的现实,选择了仓储式商业模式,...

POS机代理怎么做?
①传统代理模式 这种模式也就是层级代理模式,总部直签一代、二代、三代等等一层一层的发展下级代理,支付总部把分润发给直签的一代,一代再发给二代、分润一级一级的下发。传统模式,分润的风险就非常高,一旦有任一级不发分润,这个级别以下的整个链条就全部出问题,不管你给上家关系再好,也没有...

来宾市13626055664: java设计模式之代理模式: -
关界五子: 很简单:对外部提供统一的接口方法,而代理类在接口中实现对真实类的附加操作行为,从而可以在不影响外部调用情况下,进行系统扩展.也就是说,我要修改真实角色的操作的时候,尽量不要修改他,而是在外部在“包”一层进行附加行为...

来宾市13626055664: 设计模式:适配器模式和代理模式的区别 -
关界五子: 设计模式不针对某种特定语言,对C#/java/c++来说都一样代理模式主要用在真实的类代价昂贵的地方,比如支付宝如果说要测试购买,如果说他们的测试人员真的要购买下单然后收货,恐怕费用很高,所以就可以弄一些假的卖家,假的快递员等类,也就是代理类适配器模式主要是用在现有类的接口与需要的不一致,比如说你手机充电的接口是圆的,而现在手头只有一根接口为扁形的充电器,那就没法使用,得使用一个适配器,输入为扁形,输出为圆形

来宾市13626055664: 列出几种软件开发中常见的设计模式并解释 -
关界五子: 设计模式主要分三个类型:创建型、结构型和行为型.其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接...

来宾市13626055664: 简述JAVA的几种设计模式 -
关界五子: JAVA中使用设计模式写代码能使代码重用、直观、可靠,共有23种设计模式,分别是: 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式; 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式; 行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式,

来宾市13626055664: java中常用的设计模式有哪些? -
关界五子: 1.单例模式(有的书上说叫单态模式其实都一样) 该模式主要目的是使内存中保持1个对象 2.工厂模式 该模式主要功能是统一提供实例对象的引用.看下面的例子: public class Factory{ public ClassesDao getClassesDao(){ ClassesDao cd = ...

来宾市13626055664: java中常用到得设计模式有哪几种? -
关界五子: Java中的23种设计模式: Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式), ...

来宾市13626055664: Java代理的三种模式有什么? -
关界五子: Java的三种代理模式简述本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇文章中讲述.代理模式是什么代理模式是一种设计模式,简单说即是在不改变源码的情况...

来宾市13626055664: java中常用的几种设计模式 -
关界五子: Java中的20几种种设计模式抄:Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),袭Prototype(原始模型模式),Singleton(单例模式),2113Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模...

来宾市13626055664: JAVA 什么是设计模式,请举例说明其中一个. -
关界五子: 设计模式(Design Patterns) ——可复用面向对象软件的基础设 计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结.使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码...

来宾市13626055664: java动态代理是什么 -
关界五子: JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代理:在程序运行时,运用反射机制动态创建而成.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网