设计模式之动态代理
来源:互联网 发布:钢结构优化设计 编辑:程序博客网 时间:2024/05/16 08:37
一、java编程思想反射章节的动态代理实现代码展示
package com.lattice.dtagency;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Person{ void doSomeThing(); void doSomeThingElse(String arg);}class Peter implements Person{ @Override public void doSomeThing() { System.out.println("Peter likes fishing!"); } @Override public void doSomeThingElse(String arg) { System.out.println("Peter else likes swimming!"+arg); }}class Merry implements Person{ @Override public void doSomeThing() { System.out.println("Merry likes dancing!"); } @Override public void doSomeThingElse(String arg) { System.out.println("Merry else likes watching movies!"+arg); }}/** * 静态代理类 **/class Lucy implements Person{ private Person person; public Lucy(Person person){ this.person=person; } public void getPerson(Person person){ this.person=person; } @Override public void doSomeThing() { this.person.doSomeThing(); } @Override public void doSomeThingElse(String arg) { this.person.doSomeThingElse(arg); }}/* * 动态代理类 */class Maria implements InvocationHandler{ private Object person; public Maria(Object person){ this.person=person; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("\n_____person\t:"+person.getClass()+ "\nmethod:"+method+"\targs"+args); if(args!=null){ for(Object arg:args){ System.out.println("+++++++"+arg); } } return method.invoke(person, args); }}public class Afgency { public static void doWork(Person person){ person.doSomeThing(); System.out.println("******************"); person.doSomeThingElse("---------------------"); } public static void main(String [] args){ //doWork(new Lucy(new Peter())); //动态代理对象创建 Person person=(Person)Proxy.newProxyInstance(Person.class.getClassLoader() , new Class[]{Person.class}, new Maria(new Peter())); doWork(person); }}
二、结果展示
_____person :class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThing() argsnull
Peter likes fishing!
_____person :class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThingElse(java.lang.String) args[Ljava.lang.Object;@1a3a2a52
+++++++———————
Peter else likes swimming!———————
阅读全文
0 0
- 设计模式之代理模式-------动态代理
- 设计模式之 动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之--动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之--动态代理
- 设计模式之动态代理
- 设计模式之动态代理
- 设计模式之静态代理&动态代理
- 设计模式之代理模式--静态代理和动态代理
- 设计模式之 动态代理模式
- java设计模式之动态代理模式!
- 设计模式之动态代理模式
- 设计模式之 动态代理模式
- 设计模式之动态代理模式
- 云阅问题反馈
- 点亮细胞31-40
- 打造自己的Ubuntu渗透利器--Nmap、Zenmap、Sqlmap安装
- 集成方法
- IE兼容问题之一:table--td设置背景颜色or背景图片,border不能正常显示(用的框架是layui)
- 设计模式之动态代理
- UART 和 USART 有区别
- 喷水装置2
- 关于结构体的10个问题
- Java代码实现两台电脑之间传文件(3)
- 5种常见单例模式的特性比较及用法建议
- Windows下的OpenCVSharp配置
- Javascript的this用法
- Struts2_005_访问 web 资源