各种设计模式DEMO,完善中...
来源:互联网 发布:北京软件开发学校 编辑:程序博客网 时间:2024/06/05 09:23
coding链接
https://coding.net/u/duchao123/p/designPattern/git/tree/master/factoryDemo/src/com
目前写出的有:单例模式、工厂模式、装饰器、适配器、模板方法、代理模式。其余会不断完善…
JDK动态代理代码片段
package com.proxy.demo.imitateJDKProxyDemo;import java.io.File;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import javax.tools.JavaCompiler;import javax.tools.JavaCompiler.CompilationTask;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;import org.apache.commons.io.FileUtils;/** * 模拟JDK实现动态代理 * @author asa * */public class Proxy { public static Object newProxyInstance(Class infce,InvocationHandler h) throws Exception{ String rt = "\r\n"; String method = ""; for(Method m : infce.getMethods()){ method += " @Override"+ rt + " public void " + m.getName() + "() {"+ rt + " try{" + rt + " Method md = "+ infce.getName() + ".class.getMethod(\"" + m.getName() + "\");" + rt + " h.invoke(this,md);" + rt + " } catch(Exception e){" + rt + " e.printStackTrace();" + rt + " }" + rt + " }"; } String str = "package com.proxy.demo.imitateJDKProxyDemo;"+ rt + "import com.proxy.demo.Food;"+ rt + "import java.lang.reflect.Method;"+ rt + "import com.proxy.demo.imitateJDKProxyDemo.InvocationHandler;"+ rt + "public class $Proxy0 implements " + infce.getName() + "{"+ rt + " private InvocationHandler h;" + rt + " public $Proxy0(InvocationHandler h) {"+ rt + " super();"+ rt + " this.h = h;"+ rt + " }"+ rt + method + rt + "}"; // 产生代理类的Java文件 String filename = System.getProperty("user.dir")+"\\bin\\com\\proxy\\demo\\imitateJDKProxyDemo\\$Proxy0.java"; System.out.println(filename); File file = new File(filename); // 抛出IOException FileUtils.writeStringToFile(file, str); // 得到当前系统的编译器 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // 文件管理者 StandardJavaFileManager fileMag = compiler.getStandardFileManager(null, null, null); // 获取文件 Iterable iterable = fileMag.getJavaFileObjects(filename); // 编译任务 CompilationTask task = compiler.getTask(null, fileMag, null, null, null, iterable); // 进行编译 task.call(); fileMag.close(); // 得到类加载器 load到内存中 ClassLoader cls = ClassLoader.getSystemClassLoader(); Class cs = cls.loadClass("com.proxy.demo.imitateJDKProxyDemo.$Proxy0"); System.out.println(cs.getName()); Constructor ct = cs.getConstructor(InvocationHandler.class); return ct.newInstance(h); }}
阅读全文
0 0
- 各种设计模式DEMO,完善中...
- 不同设计模式解决的问题(完善中。。)
- 代理设计模式Demo
- Builder设计模式Demo
- iOS 设计模式初步待完善版
- 整理设计模式(待完善)
- 各种设计模式分析
- 各种设计模式一览
- 各种设计模式分析
- 设计模式各种解释
- Android 各种设计模式
- Android 各种设计模式
- Java各种设计模式
- 各种设计模式总结
- javascript各种设计模式
- 《 Head First 设计模式》Demo
- iOS_代理设计模式demo
- UI-KVO设计模式Demo
- 函数
- 服务器Linux系统下的ext文件系统修复方案
- 1002. 等价二叉树
- intellij +maven + jetty实现热部署
- 操作系统字节顺序表示
- 各种设计模式DEMO,完善中...
- ScrollView嵌套ListView
- 计算后缀表达式
- RSA加密解密
- TypeScript 泛型<T>使用整理
- redis集群实战
- Thymeleaf 常用属性
- 【重新入门数位Dp】Hdu 2089 不要62【记忆化搜索写法】数位Dp
- 透传模式(透明传输SeriaNet)详解