设计模式之动态代理
2017-10-27 15:21
246 查看
一、java编程思想反射章节的动态代理实现代码展示
二、结果展示
_____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!———————
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!———————
相关文章推荐
- 设计模式之静态代理&动态代理
- java设计模式—动态代理模式
- 架构设计之设计模式 (二) 静态代理和动态代理--间接“美”
- 设计模式-深入剖析动态代理模式(3)内部运作机制-通俗代码版
- Java设计模式之静态代理和动态代理(简单例子)
- 设计模式 --代理模式--动态代理
- Java设计模式Proxy之动态代理
- 动态代理(设计模式)
- 设计模式学习笔记(三)动态代理模式
- 设计模式之代理模式(动态代理)
- 设计模式----动态代理模式
- 设计模式- 代理模式 (静态代理 和 动态代理)
- 设计模式____代理模式(静态代理,动态代理)
- 设计模式之代理模式(动态代理)
- 设计模式之 动态代理模式
- 【设计模式】动态代理Proxy_01
- java代理设计模式(静态代理与动态代理)
- 设计模式-动态代理模式
- 设计模式——代理模式(理解静态代理和动态代理+代码)
- 设计模式之动态代理