使用反射前后的参数化工厂方法
来源:互联网 发布:人工智能的英文 编辑:程序博客网 时间:2024/06/10 02:54
使用反射前后的参数化工厂方法
工厂方法模式定义一个用于创建对象的接口,使得一个类的实例化延迟到其子类。带参数的工厂方法可以创建多种产品,它采用一个标识来区分要创建对象的种类,而要创建的所有对象都必须共享同一个接口,或都是某个类的子类。
.Net框架中实现Hash算法的MD5CryptoServiceProvider和SHA1CryptoServiceProvider都是从HashAlgorithm继承的子类,我们采用参数化工厂方法来返回创建的对象。其C#实现为:
{
switch(method)
{
case "MD5":
MD5 md5 = new MD5CryptoServiceProvider();
return md5;
break;
case "SHA1":
SHA1 sha1 = new SHA1CryptoServiceProvider();
return sha1;
break;
}
return null;
}
说明:使用本代码时需要导入命名空间:
using System.Security.Cryptography;
这种实现方式可以根据参数来创建不同的对象,但编写该方法的代码时,必须知道所有的子类才可以实现。如果在未来有新增的方法,则必须修改工厂方法的代码。而反射在这一点上可以发挥自己的优势。例如下面的C#代码:
{
string strClass="System.Security.Cryptography." + method + "CryptoServiceProvider";
Assembly ass=Assembly.Load("mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
HashAlgorithm hash = (HashAlgorithm)ass.CreateInstance(strClass);
return hash;
}
说明:使用本代码时需要导入命名空间:
using System.Security.Cryptography;
using System.Reflection;
另外下面的代码要放到配置文件的<compilation></compilation>段中。
<assemblies>
<add assembly="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>
上面的代码还有一些不足在于,如果更新了mscorlib库,则其Version和PublicKeyToken将会发生变化,这样同样也需要更改GetHashAlgorithm方法的代码。但毕竟mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089是一个字符串,同样也可以放到配置文件中来获取这个串。当mscorlib更新时,只要保证mscorlib实际版本与配置文件中的配置相对应即可。
如果是使用java语言,就不必使用反射了,因为它本身就提供的就是一个带参数的工厂方法。
MessageDigest sha = MessageDigest.getInstance("SHA-1");
说明:使用本代码时要导入包:
import java.security.*;
- 使用反射前后的参数化工厂方法
- java反射:使用asm 获取方法的参数名
- java反射:使用asm获取方法的参数名
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:参数化工厂方法
- 使用JAVA的反射机制反射带有数组参数的私有方法
- 反射方法的使用
- 反射方法的使用
- Action跳转时,前后台参数传递的方法
- LifrRay Portlet前后台参数和方法调用的笔记
- 隐藏变量的使用-前后台参数的传递控制。
- 反射带有out参数的方法
- 反射方法参数的类型兼容性
- java反射机制中反射带参数的方法
- 反射的使用---调用方法(*)
- 使用反射设置枚举类型的参数
- httpclient接口测试利用反射根据参数名执行方法的使用示例
- 反射获取方法名及参数名,反射获取参数作为对象使用
- 使用Date.parse()方法,判断两个日期的前后
- C/S程序开发中,关于DCOM的技术讨论
- PHP5中数据库抽象层: PDO
- 字符转换为整型时,可能导致数据溢出
- NGN QoS探讨
- ASP.NET中的事件冒泡机制
- 使用反射前后的参数化工厂方法
- 一次不成功的汇编优化
- 动态生成SQL查询条件定制表单及语句的脚本
- 清华教授称中国与日本国民素质差距30年
- 一个现金流量表的代码,感谢琛(290911233)提供。
- 清华北大等名校博士联名倡议慎对圣诞节
- 淘宝上买家与卖家的对话
- JAVA的JAR文件包及jar命令详解
- 程序员修身养性的十大原则