java代理可分为动态代理和静态代理。
代理模式的作用:为其他的对象提供一种代理以访问真实的对象,作用类似于“中介”
静态代理:包含三个角色
1.抽象角色:真实的对象与代理对象共同实现的接口或抽象类
2.代理角色:内部包含了对真实对象的引用,其实现的方法内部实际上调用的是真实的角色的对象,是对真实角色的一种封装。
3.真实角色:最终操作的那个对象。
抽象角色
package com.qidian.proxy;
//抽象的角色,也可定义成抽象类
public interface AbsInteface
{
public void rent();//租房子
}
真实角色
package com.qidian.proxy;
//真实的角色实现了共同的抽象接口
public class RealRole implements AbsInteface
{
@Override
public void rent()
{
System.out.println("房东租房子!!!");
}
}
代理角色
package com.qidian.proxy;
//代理类也实现了共同的契约
public class ProxyRole implements AbsInteface
{
RealRole real;//真实类的引用
@Override
public void rent()
{
//实际上操作的还是真实类
//真实类是一个“枪手”
RealRole realRole = (real == null ? new RealRole() : real);
realRole.rent();
}
}
测试的环境
package com.qidian.proxy;
public class ProxyTest
{
public static void main(String[] args)
{
AbsInteface abs = new ProxyRole();
abs.rent();// 房东租房子!!!
}
}
动态代理
java动态代理类位于java.lang.reflect包下面主要涉及两个类:Interface InvocaionHandler 接口和Proxy类
未完待续……