六种常用的设计模式java实现(五)代理模式
来源:互联网 发布:新星星知我心 编辑:程序博客网 时间:2024/06/01 22:25
代理这个概念,大家应该不陌生,像spring中的动态代理和jdk代理,以及webservice中都会用到代理模式。顾名思义,就是通过代理的方式完成一些事。
一、基本概念
为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务
二、结构
● 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。
● 目标对象角色:定义了代理对象所代表的目标对象。
● 代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。
三、代码实现
首先,准备一个抽象对象角色:
package org.wuqiong.designpattern.proxypattern;/** * ClassName:AbstractObject <br/> * Function: 抽象对象角色. <br/> * Date: 2016年1月29日 下午4:17:04 <br/> * @author qiyongkang * @version * @since JDK 1.6 * @see */public abstract class AbstractObject { //操作 public abstract void operation();}
然后,准备一个目标对象角色:
package org.wuqiong.designpattern.proxypattern;/** * ClassName:RealObject <br/> * Function: 目标对象角色. <br/> * Date: 2016年1月29日 下午4:17:56 <br/> * @author qiyongkang * @version * @since JDK 1.6 * @see */public class RealObject extends AbstractObject { @Override public void operation() { //一些操作 System.out.println("一些操作"); }}
接下来,再准备一个代理对象角色:
/** * ClassName:ProxyObject <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年1月29日 下午4:19:47 <br/> * * @author qiyongkang * @version * @since JDK 1.6 * @see */public class ProxyObject extends AbstractObject { RealObject realObject = new RealObject(); @Override public void operation() { // 调用目标对象之前可以做相关操作 System.out.println("before"); realObject.operation(); // 调用目标对象之后可以做相关操作 System.out.println("after"); }}
最后,准备一个客户端:
package org.wuqiong.designpattern.proxypattern;/** * ClassName:Client <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2016年1月29日 下午4:21:53 <br/> * @author qiyongkang * @version * @since JDK 1.6 * @see */public class Client { public static void main(String[] args) { AbstractObject obj = new ProxyObject(); obj.operation(); }}
通过以上代码分析,可以看出其实目标对象和代理对象做的核心事是一样的,只不过代理对象还可以完成额外的任务,同时还可以把目标对象给隐藏起来。
其实,在spring中的面向切面编程,用到的就是代理模式。
好了,代理模式就讲到这儿了。
0 0
- 六种常用的设计模式java实现(五)代理模式
- 六种常用的设计模式java实现(六)策略模式
- 六种常用的设计模式java实现(一)工厂模式
- 六种常用的设计模式java实现(二)单例模式
- 六种常用的设计模式java实现(三)责任链模式
- 六种常用的设计模式java实现(四)模板模式
- 最常用的设计模式---代理模式(C++实现)
- Java设计模式(六) 代理模式 VS. 装饰模式
- Java设计模式(六) 代理模式 vs. 装饰模式
- mitmproxy的五种代理模式(六)
- JAVA设计模式之六代理模式
- java设计模式之五:代理模式
- 设计模式(六)代理模式
- 设计模式(六)代理模式
- 设计模式系列(六)代理模式
- 设计模式-java实现代理模式(静态代理)
- Java 常用设计模式-代理模式Proxy
- 设计模式(六)---代理模式
- 蓝桥杯 历届试题 错误票据 java详解
- IOS学习 UIViewController 视图控制器的创建
- nodejs 链接数据库的一些代码
- chrome developer tool 调试技巧
- ELK+Redis日志分析平台测试性能记录
- 六种常用的设计模式java实现(五)代理模式
- sql中exists,not exists的用法
- 黑马程序员——网络编程
- 第一篇blog
- poj 2251 Dungeon Master
- 自己总结的Xcode5和Xcode7的主要区别
- 内省调用JavaBean实现getXxx和setXxx的两种方式
- 钱宝订单查询 chaqb.com
- ui进阶第二天,一些琐碎的东西