23中设计模式之动态代理模式

注:每条线的定义如图在这里插入图片描述
动态代理模式的类图设计

在这里插入图片描述

注意:InvocationHandler的接口是JDK提供的一个动态代理类的接口,对被代理类的方法进行代理

public interface IGamePlayer{
//登录游戏
public void login(String user,String password);
//杀怪, 这是网络游戏的主要特色
public void killBoss();
//升级
public void upgrade();
}
public void GamePlayer implements IGamePlayer{
private String name = "";
public GamePlayer(String _name){
this.name = _name;
}
//登录游戏
public void login(String user,String password){
System.out.print(user+"登录了");
};
//杀怪, 这是网络游戏的主要特色
public void killBoss(){
System.out.print("boss被干死了");
};
//升级
public void upgrade(){
System.out.print("升级了");
};
}
}
public void DynamicProxy implements InvocationHandler{
private Object obj;
public DynamicProxy(Object object) {
		this.obj = object;
	}
//调用被代理的方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(this.obj, args);
return result;
}
} 

在使用的地方进行调用

public void User{
//被代理的对象
IGamePlayer player = new IGamePlayer("炸锅");
ClassLoader loader = IGamePlayer.getClass().getClassLoader();
InvocationHandler handler = new DynamicProxy(player); 
IGamePlayer proxy = (IGamePlayer)Proxy.newProxyInstance(loader,new Class[]{IGamePlayer.calss},handler);
proxy.login("炸锅","222")
} 

DynamicProxy的AOP(Aspect oritented programming)的实现范例

public void DynamicProxy implements InvocationHandler{
private Object obj;
public DynamicProxy(Object object) {
		this.obj = object;
	}
//调用被代理的方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(this.obj, args);
//"login 是指自己指定的obj 的方法的一个代表,实际可以是任意的obj的方法"
if(method.getName().equalsIgnoreCase("login"){
	// 自己的逻辑
}
return result;
}
} 
总结

DynamicProxy 的实质:

  • 代理的对象 ****(利用依赖倒置原则和里氏替换原则)
  • InvocationHandler的实现类
  • Proxy.newProxyInstance(ClassLoader l,new Class<?>[] interfaces,InvocationHandler handler);

动态代理的内部设计后续完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值