代理模式之基础

“代理”这个熟悉而又陌生的词语,熟悉是因为在生活中随处可见:超市就是一个简单的代理;让别人代送礼物是一个代理;让别人传递一个消息也是一个代理、、、看吧在生活这么多代理,但是这个组成的代理模式到底是什么呢?它又有什么用途呢?没有它会怎么样?等等一些列的问题围绕着我,那么接下来就一块学习下代理模式吧!

一、是什么?

代理模式(proxy)很官方的说法,为其他对象提供一种代理以控制对这个对象的访问。说白了就是为这个对象解耦,由原来的直接访问到间接访问,这样将其分离达到解耦的目的。UML图:

二、分类

代理模式可以分为静态代理和动态代理。

静态代理是为每个被代理的对象构造对应的代理类,但是如果为多个类进行代理,并且前后插入的代码都是一致的,那么就会产生很多重复的代码,就是为了解决这个问题引入了动态代理。

动态代理是在运行时动态创建的具体委托类。动态代理与普通的代理相比较,最大的好处是接口中声明的所有方法都被转移到一个集中的方法中处理(invoke),这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。

三、什么时候用?

1.创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GOF称之为虚代理(Virtual
Proxy)

2.为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成,GOF称之为远程代理(Remote
Proxy)

3.对对象进行控制访问的时候,比如在Jive论坛中不同权限的用户(如管理员、普通用户等)将获得不同层次的操作权限,我们将这个工作交给一个代理去完成,GoF称之为保护代理(ProtectionProxy)

4.智能指针(Smart Pointer),关于这个方面的内容,建议参看Andrew Koenig的《C++沉思录》中的第5章

四、优缺点

优点:协调调用者和被调用者,一定程度上降低耦合

缺点:有些类型的代理模式会造成请求处理速度变慢需增加额外工作,比如实现很多重复的代码。有些代理模式实现复杂。

五、总结

通过以上对代理模式的简单理解,用简单的一句话来概括就是:为被代理者提供一个中间层类来为它和直接调用被代理者类解耦。关于静态代理和动态代理怎么用就期待下一篇吧!

时间: 2024-11-02 17:34:29

代理模式之基础的相关文章

JAVA基础(一)——代理模式

实现java代理一般分为静态代理和动态代理(jdk代理和cglib代理) 代理模式 简单的说就是对原有的业务进行代理,外界通过代理访问真实对象,代理类似现在的中介机构,房产中介就是一个代理,代理房东,租户只要找到代理而无须关心房东是谁,代理能在房东的基础上增强房东的行为. 代理模式代码 JAVA静态代理 业务接口 package com.rrg.proxy.jdk.staticProxy; /** * * @author abc * */ public interface Count { /**

AOP基础—代理模式

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

基础篇——代理模式之SpringAOP

一.AOP概述 AOP思想的实现一般都是基于代理模式,JDK动态代理模式只能代理接口,而不能代理类.但是SpringAOP同时支持CGLIB.JDK.ASPECTJ这三种代理模式,因此,如果目标的对象实现了接口,SpringAOP将会采用JDK动态代理,如果目标对象没有实现接口,SpringAOP切换成CGLIB动态代理. 在实际情况下,我们通常需要对一个接口实现多个切面,比如日志打印.分布式锁.权限校验等等.这时候我们就会面临一个优先级的问题,这么多的切面如何告知Spring执行顺序呢?这就需

Spring框架_代理模式(静态代理,动态代理,cglib代理)

共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下:                                      用户库jar包,需要手动发布到tomcat. (每次新建项目) 3) 重新发布项目 * 配置文件错误 (web.xml / struts.xml /bean.xml /hibernate.xml / *.hbm.xml) 明确的提示 * 端口占用 * we

设计模式之代理模式(Proxy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

代理模式的概念

代理模式:就是在不修改目标对象的基础上使用代理对象增加目标对象功能的. 根据代理对象与目标对象之间的 关系,代理关系产生的时机可以分为二类:静态代理与动态代理 静态代理:在程序运行前,代理类与目标类之间的代理关系就已经确立了,从代码上看:有代理类的才是静态代理,比如公司与法律顾问 动态代理:程序运行时才产生代理关系,从代码上看:没有代理类,只有代理对象的才是动态代理(代理对象是有代理工厂或者代理工具生成的),比如个人与律师

java设计模式--代理模式

代理模式 proxy:为其他对象提供一种代理,并以控制对这个对象的访问,好比经纪人和明星之间的关系,经纪人就是明星的代理类.简单的就是在方法调用前后做处理,AOP思想,好处就是不改变原来类方法的基础上,动态的添加其他方法. 代理模式的3个角色 1.抽象角色2.真实角色 3.代理角色 1.静态代理 代理类调用被代理类的方法. 2.动态代理---比较常用 public interface People { void eat(); } public class Zhangsan implements

【原】谈谈对Objective-C中代理模式的误解

[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective-C中的delegate大部分用法属于委托模式.全文有些抠概念,对实际开发没有任何影响. 前段时间看到的一篇博客iOS开发——从一道题看Delegate,和这篇博客iOS APP 架构漫谈解决的问题类似.两篇blog都写得很不错,都是为了解决两个页面之间的数据传递问题: A页面中有一个UILabel

Proxy - 代理模式

定义 为其他对象提供一种代理以控制对这个对象的访问. 案例 对一个对象进行访问控制的原因在于只有确实需要这个对象的时候,才会进行创建和初始化.比如一个文件编辑系统,要打开一个文件,但是文件里边除了文字,还有许多的图片.而打开文件的时候,屏幕只有那么大,不一定能完整的显示.为了提升打开文件的速度,这时候不能显示的图片就可以延迟创建,在需要显示的时候才把它创建处对象,再显示出来,这时候就需要代理模式: ImageProxy就是Image的一个代理,只有需要画Image的时候,才会去创建Image对象