Java设计模式--代理模式

定义

为对象提供一种代理来控制其他对象的访问,一般一个对象不适合或不能直接访问另一对象,而代理可以在对象之间起到中介作用。

角色

  1. 抽象角色:真实角色和代理角色共同的接口
  2. 代理角色:代理角色内部含有对真实对象的引用,从而可以操纵真实对象。同时代理对象有和真实对象同样的接口,以便能随时替代真实对象。
  3. 真实角色:就是我们想要访问的角色。

分类

静态代理:代理类的字节码文件在运行前就已经存在,代理对象和目标对象运行前就已存在。

动态代理:代理类的字节码文件是jvm在运行时根据反射机制生成的,对象的关系在运行时确定

动态代理示例

抽象角色

//抽象角色
interface User{
	public void speak();
	public void done();
}

真实角色

//真实角色
class UserInfo implements User{

	@Override
	public void speak() {
		System.out.println("hello~");
		
	}

	@Override
	public void done() {
		System.out.println("running~");
		
	}
	
}

代理角色处理器

//代理角色处理器
class UserHandler implements InvocationHandler{

	private User user;
	public UserHandler(User user){
		this.user = user;
	}
	//生产被代理的对象
	public User getUserInstance(){
		User uiProxy = (User) Proxy.newProxyInstance(UserHandler.class.getClassLoader(), 
				UserInfo.class.getInterfaces(), 
				this);
		return uiProxy;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		
		System.out.println("方法前准备");
		Object invoke = method.invoke(user, args);//被代理对象要执行的方法
		System.out.println("方法后结束");
		
		return invoke;
	}
	
}

优点

  1. 只需要关注业务逻辑本身,保证了业务的重用性
  2. 能够协调调用者与被调用者,一定程度上减少了系统耦合性

缺点

  1. 增加了代理对象,可能会降低请求的速度
  2. 代理过程较为复杂
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值