代理模式
是模式中的一种,其实代理模式是 静态代理。而JDK中的代理是动态代理。
代理模式,有三个组件:抽象主题、真实主题、代理主题。
代理模式,是对于被代理对象进行访问拦截。
装饰模式,意图对于原油对象进行功能增强。
动态代理 和 静态代理 区别?
*静态代理:编写代理类,代理类引用被代理对象target。
*动态代理,代理的类,是由程序员的程序在内存中动态创建的,代理类不是由程序员创建的。
jdk1.3引入了动态代理技术。
-------------------------------------------------------------------------------------------------
*静态代理,实例代码:
package cn.gp.proxy.proxypattern;
//主题
public interface Subject {
public void request();//请求方法
}
package cn.gp.proxy.proxypattern;
//真实主题
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("真实主题方法。。。。");
}
}
package cn.gp.proxy.proxypattern;
//代理主题
public class ProxySubject implements Subject{
//必须持有真实主题的引用
private Subject target;
//设置真实主题的方法
public void setTarget(Subject target) {
this.target = target;
}
@Override
public void request() {
//拦截真实主题的访问
System.out.println("拦截真实主题的访问。。。。");
System.out.println("可以进行方法增强,如性能监视、事务管理、安全检查、缓存");
//调用真实主题
target.request();
System.out.println("可以进行方法增强,如性能监视、事务管理、安全检查、缓存");
}
}
package junit;
import org.junit.Test;
import cn.gp.proxy.proxypattern.ProxySubject;
import cn.gp.proxy.proxypattern.RealSubject;
import cn.gp.proxy.proxypattern.Subject;
public class ProxyTest {
@Test
public void testProxy(){
//获得真实主题
Subject realSubject = new RealSubject();
//获得代理主题
ProxySubject proxySubject = new ProxySubject();
//对真实主题进行代理
proxySubject.setTarget(realSubject);
proxySubject.request();
}
}
------------------------------------------------------------------------------------------------
*动态代理,在实际应用中更为多见。