标签:
代理模式:所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式是一种结构性设计模式。当客户端不想直接调用主题对象,而希望主题对象的行为前后加上预处理或者后续处理时,则可以使用代理模式。
代理模式的三种角色:主题抽象类、实际主题类、代理类。
主题抽象类:
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(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012110719/article/details/47751937