java代理

代理模式在Spring中,运用的淋漓精致,面向切面的编程,变得很有趣

 

假设有个实际书籍供应商,网上书籍供应商,而网上书籍供应商是代理商

 

 

package com.study.proxy;

public interface Subject {
	public void sailBook();
}

 package com.study.proxy;

 

//真实卖家,最初卖家
public class RealSubject implements Subject {

	@Override
	public void sailBook() {
		System.out.println("卖书");
	}

}

网上代理商代理类:

 

package com.study.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;
//代理商
public class MyHandler implements InvocationHandler {
	
	private Object realSub = null;
	public void setSub(Object sub){
		this.realSub = sub;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		if(this.realSub==null){
			System.out.println("你无权操作");//判断权限
			return null;
		}else{
			String dazhe = DaZhe();
			System.out.println(dazhe);
			Object rtObj = method.invoke(realSub, args);
			String give = Give();
			System.out.println(give);
			String log = dazhe+give+new Date();
			System.out.println(log);
			return rtObj;
		}
		
	}
	private String DaZhe(){
		return "打折信息";
	}
	
	private String Give(){
		return "送代金券";
	}
	
}

 

 客户端,测试类

 

package com.study.proxy;

import java.lang.reflect.Proxy;

public class Client {

	public static void main(String[] args) {
		Subject sub = new RealSubject();
		MyHandler handler1 = new MyHandler();
		MyHandler handler2 = new MyHandler();
		handler1.setSub(sub);
		Subject proxySub1 = (Subject) Proxy.newProxyInstance(
				RealSubject.class.getClassLoader(),
				RealSubject.class.getInterfaces(), handler1);
		Subject proxySub2 = (Subject) Proxy.newProxyInstance(
				RealSubject.class.getClassLoader(),
				RealSubject.class.getInterfaces(), handler2);
		proxySub1.sailBook();
		proxySub2.sailBook();
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值