随机数生成器的设计要点
- 唯一性(保证全局只由一个类对象来生成)
什么是单态设计模式?
单态设计模式就是:一个类只生成一个实例
在何种情况下需要使用单态设计模式?
请大家查看@likika2012的单例模式(Singleton)的常见应用场景
Singleton(单态设计模式)要点
- 单态设计模式(保证类的对象在内存中只有一个)
- 1、把类的构造函数私有
- 2、自己创建一个类的对象
- 3、对外提供一个公共的方法,返回类的对象
闲话不多说,我们来看代码实现
class TokenProccessor{
private TokenProccessor(){}
private static final TokenProccessor instance = new TokenProccessor();
public static TokenProccessor getInstance(){
return instance;
}
public String makeToken(){
// 利用系统当前时间来保证随机数的唯一性,这也是struts里获取随机数的方法,
// token获取随机数的长度不确定,要使获取长度一致,要经过MD5提取数据摘要
String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";
try {
//MD5数据摘要也称数据指纹 其长度是128位长 ,也就是16个字节
MessageDigest md = MessageDigest.getInstance("md5");
byte md5[] = md.digest(token.getBytes());
//md5[]得到的是任意的二进制数据,若直接转成字符输出会产生乱码
//base64编码 是将三字节转成四字节,每个字节范围为0-63,并对应相应的字符,
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(md5);
} catch (NoSuchAlgorithmException e) {
//把异常转成运行时异常往上抛
throw new RuntimeException(e);
}
}
}