现在的位置: 首页 > 综合 > 正文

动态代理模式

2017年12月26日 ⁄ 综合 ⁄ 共 1497字 ⁄ 字号 评论关闭

动态代理模式的角色:

--抽象角色:是真实对象和代理对象的公共接口

--代理角色:对真实对象进行封装,可以操作真实对象

--真实角色:依赖代理角色,代理真正操纵的类

抽象角色:

subject.java

package com.wansha.proxy;

public interface Subject {
	public void request();
}

真实角色:

Subject1.java

package com.wansha.proxy;

public class Subject1 implements Subject {

	@Override
	public void request() {
		System.out.println("Subject1");
	}

}

Subject2.java

package com.wansha.proxy;

public class Subject2 implements Subject {

	@Override
	public void request() {
		System.out.println("Subject2");
	}

}

生成代理角色的实现类

ProxySubject.java


package com.wansha.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxySubject implements InvocationHandler {
	private Object obj;
	public ProxySubject(Object obj){
		this.obj = obj;
	}
	public ProxySubject(){
		
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("代理方法执行之前");
		method.invoke(obj,args);
		System.out.println("代理方法执行之后");
		return null;
	}
	public void setObj(Object obj) {
		this.obj = obj;
	}
	public Object getfactory()throws Exception{
		if(obj == null){
			throw new Exception("没有目标对象");
		}
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),new ProxySubject(obj));//生成代理角色
		
	}
}

客户端:

Client.java

package com.wansha.proxy;

import java.lang.reflect.Proxy;

public class Client {
	public static void main(String[] args) throws Exception{
		realSubject real = new  realSubject();
		Subject1 real1 = new  Subject1();
		Subject2 real2 = new  Subject2();
		ProxySubject proSub= new ProxySubject();
		proSub.setObj(real);
		Subject sub = (Subject)proSub.getfactory();
		sub.request();
	}
}

抱歉!评论已关闭.