设计模式之代理模式

[size=medium][color=blue]由于我刚学JAVA3到4个月,所以JAVA语言的很多知识都理解的不透彻,但是我勉励自己有空多来这里做做学习笔记,同时希望高手指正 总之我个人觉得代理模式思想在Struts2.0中的拦截器和Spring的AOP中都被升华了[/color] 附件中是我QQ截的UML类图

[color=blue]//代理接口[/color]

[color=brown]package[/color] proxy;

[color=brown]public interface [/color][color=darkblue]IMyBussiness[/color] {

[color=brown]public abstract void[/color] add();

[color=brown]public abstract int [/color]delete();

[color=brown]public abstract void [/color]update();

}

[color=green]//代理类[/color]
[color=brown]package[/color] proxy;

[color=brown]public class[/color] [color=green]MyBussiness [/color]implements [color=darkblue]IMyBussiness[/color]

/*
* (non-Javadoc)
*
* @see proxy.IMyBussiness#add()
*/
[color=brown]public void[/color] add() {
[color=blue]//业务处理代码[/color]
System.out.println("[color=blue]业务处理,添加信息[/color]");
}

//[color=blue]这里返回类型int 为测试用[/color]
[color=brown]public int [/color]delete() {
System.out.println("[color=blue]业务处理,删除信息[/color]");
return 1;
}

[color=brown]public void[/color] update() {

System.out.println("[color=blue]业务处理,更新信息[/color]");
}
}


//[color=blue]自定义代理实例的调用处理程序类需实现[/color]java.lang.reflect.InvocationHandler[color=blue]接口[/color]

[color=brown]package[/color] proxy;

[color=brown]import [/color]java.lang.reflect.InvocationHandler;
[color=brown]import [/color]java.lang.reflect.Method;

[color=brown]import[/color] org.apache.log4j.Logger;

[color=brown]public class[/color] [color=green]LogInvocationHandler[/color] [color=brown]implements[/color] [color=darkblue]InvocationHandler [/color]{
[color=green]Logger[/color] log = [color=green]Logger[/color].getLogger(this.getClass());
[color=brown]private[/color] [color=darkblue]IMyBussiness[/color] bussiness;

[color=brown]public[/color] LogInvocationHandler([color=darkblue]IMyBussiness [/color]bussiness) {
[color=brown]this[/color].bussiness = bussiness;
}

[color=brown]public[/color] [color=green] Object [/color]invoke([color=green]Object[/color] proxy, [color=green]Method[/color] method, [color=green]Object[] [/color]args)
[color=brown]throws [/color]Throwable {
String m = method.getName();
if (m != null) {
if (m.startsWith("add")) {
log.info("[color=blue]添加操作[/color]");
} else if (m.startsWith("delete")) {
log.info("[color=blue]删除操作[/color]");
} else if (m.startsWith("update")) {
log.info("[color=blue]更新操作[/color]");
}
}
Object obj = method.invoke(bussiness, args);
[color=blue]// 如果底层方法返回类型为 void,则该调用返回 null[/color] System.out.println("---------" + obj);

[color=brown]return [/color]obj;
}

}


[color=blue]//代理测试类[/color]


[color=brown]package[/color] proxy;

[color=brown]import[/color] java.lang.reflect.Proxy;

[color=brown]public class [/color]Test {

[color=brown]public static void[/color] main([color=green]String[] [/color]args) {
[color=green]MyBussiness[/color] bussiness = new [color=green]MyBussiness[/color]();
[color=green]LogInvocationHandler[/color] handler = [color=brown]new[/color] [color=green]LogInvocationHandler[/color](bussiness);
[color=blue]IMyBussiness[/color] ibussiness = ([color=blue]IMyBussiness[/color]) [color=green]Proxy[/color].newProxyInstance(
bussiness.getClass().getClassLoader(),bussiness.getClass().getInterfaces(), handler);
ibussiness.delete();

}

}
[color=blue]
//输出结果[/color]

[color=indigo]INFO-删除操作
业务处理,删除信息
---------1[/color]

[color=red]//我觉得像我们这样的初学者最好用Debug模式来看下代码的执行流程,另外多看看API文档帮助.[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值