java设计模式之代理模式程序举例
2015-08-18 14:56
357 查看
代理模式:
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式是一种结构性设计模式。当客户端不想直接调用主题对象,而希望主题对象的行为前后加上预处理或者后续处理时,则可以使用代理模式。
代理模式的三种角色:主题抽象类、实际主题类、代理类。
主题抽象类:
实际主题类:
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式是一种结构性设计模式。当客户端不想直接调用主题对象,而希望主题对象的行为前后加上预处理或者后续处理时,则可以使用代理模式。
代理模式的三种角色:主题抽象类、实际主题类、代理类。
主题抽象类:
package com.yihai.spring.proxy; public abstract class Subject { //主题抽象类定义了主题对象的行为,下面的例子中主题抽象类定义了主题对象的request行为。 public abstract void request(); }
实际主题类:
package com.yihai.spring.proxy; //实际主题类继承了抽象主题类Subject,实现了抽象主题类中的行为request。实际主题类就是AOP中的目标对象。 public class RealSubject extends Subject { @Override public void request() { System.out.println("RealSubject--实际主题类"); } }代理类:
package com.yihai.spring.proxy; /** * 代理类继承了抽象主题类,同时关联了实际主题类。代理类中定义了 * preRequest和postRequest方法,对实际主题类中的request * 方法实施了控制。代理类对应Spring AOP中的ProxyFactoryBean * 类,用来生成代理对象。 */ public class ProxySubject extends Subject { //代理类关联实际主题类 private RealSubject realSubject; @Override public void request() { preRequest();//自定义的方法,方法中可以实现一些想在请求之前就要完成的逻辑 if(realSubject==null){ realSubject = new RealSubject(); } realSubject.request(); postRequest();//自定义的方法,方法中可以实现一些想在请求之后想要完成的逻辑 } //自定义方法:代理之前完成的逻辑 private void preRequest() { System.out.println("--------------代理之前完成的业务逻辑输出------------"); } //自定义方法:代理之后完成的逻辑 private void postRequest() { System.out.println("--------------代理之后完成的业务逻辑输出-------------"); } //main方法 public static void main(String[] args) { ProxySubject proxySubject = new ProxySubject(); proxySubject.request(); } }
相关文章推荐
- java mavn 2.注意事项
- springMVC 获取本地项目路径 及后整理上传文件的方法
- java对cookie的操作
- SpringMVC注解配置
- Java反射的几个方法区别
- 《Java设计模式 》之责任链模式
- java.lang.StackOverflowError when calling count()
- Java多线程-并发协作(生产者消费者模型)
- simpleDateFormat 使用
- MyEclipse快捷键大全
- Java和Flex积分误差(两)
- java在url传输前更改字符编码
- 杭电ACM2048java做法
- 斐波那契数列 Java实现
- Spring_Accepting request input
- java实现常见的各种排序算法
- 深入理解Java虚拟机
- eclipse 如何把java项目转成web项目
- java实现图
- JAVA序列化Serializable