写这篇博客是为了解决《Dota兄订餐——静态代理(java)》 里最终的遗留问题。
想必大家都或多或少了解一些Dos命令,在调用外部程序时,经常会用到dos命令来完成。其中有一条万能的命令,就是用Explorer.exe来打开任意程序,就相当于直接双击该程序。
先给大家看一下我们要调用的外部资源,放到一个文件夹中,包括图片、音乐、视频、文本文档、word文档、还有其他文档,最后还会加上一个网址。
我把Dos命令写入到一个bat中,也放入同一个文件夹中,命令如下:
@echo off
rem 调用默认程序打开图片
explorer 1.jpg
rem 调用默认程序打开pdf
explorer 42种方法全面提升宝宝的智能.pdf
rem 调用默认程序打开快捷方式
explorer SSH视频.lnk
rem 调用默认程序打开文本文档
explorer X光下看腾讯.txt
rem 调用默认程序打开chm
explorer 电脑故障维修大全.chm
rem 调用默认程序打开mp4
explorer 黄梅戏女驸马谁料皇榜中状元选段.mp4
rem 调用默认程序打开flv
explorer 马云创业演讲.flv
rem 调用默认程序打开音乐
explorer 我会很诚实.mp3
rem 调用默认程序打开Word文档
explorer 验收标准V3.1.docx
rem 调用默认浏览器打开百度
explorer http://www.baidu.com
现在我们双击这个bat文件,系统会自动调用相对应的默认程序去打开相应的文件。
在上面的例子中,每种格式的文件都对应一种默认的打开程序。而且这个默认程序是可以手动更换的。而Explorer就相当于这里面的动态代理。我们把具体的参数传递给代理Explorer,它会根据不同的文档格式,启动对应的默认程序,然后再执行相应的操作。当默认程序换了,就会启动新设定的默认程序。而且不仅仅局限于一类文件或程序,而是可以打开任意程序或文档。这就是动态代理模式的应用。
静态代理是一个代理类服务一个接口,且代理是针对于这个接口编写特定代码,其字节码是编译期生成。而动态代理的字节码(即编译后的class文件)在程序运行时由java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了简化了编程工作,而且提高了软件系统的可扩展性,因为Java反射机制可以生成任意类型的动态代理类。Java.lang.reflect包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。
先说说Proxy类,它就是一个动态代理类,最终返回Proxy这个动态代理类所代理的接口类对象,使用的就是Static