这篇文章已经废弃。
实际开发中,这个工具类用到得非常少。
RandN是主要类,用于生成指定位数的随机字符串,具体功能在这个类中实现
Rand8是修饰了RandN中每个对外方法的修饰类,用与生成8位的随机字符串(Deolin经常用到这个位数)
为了减少重复代码,RandN中的方法分了三层。这里选取一个方法系列为例。
第一层
以这两个方法为例,这里采用了两种策略——不提供种子和提供种子,由于这两种策略的不同指出仅仅体现在Random对象上,
所以将这两种策略封装成了new Random(),连同size一起,向下一层转递。
size在这层中只是一个过客。
第二层
从这一层开始,方法全部都是私有的,作为外部方法的代码封装使用。
而这个方法,因为让上一层生成的Random对象入参,所以它是那两个方法的共用部分。
它的作用是生成构建一个符合方法名的字符数组,连同Random对象和size一起,向下层传递
Random对象和size在这层中只是过客。
第三层
这是最后一层的方法了,这层只有它一个。
从参数可以看上,客户端和上两层生成的信息全部汇总到了这个,
这个方法可以根据任意的随机策略,在任意的字符数组里,生成任意长度的字符串,
最后一层层向外返回。
更具体的实现需要查看源码,最后放上使用实例。
package io.deolin.commons.simplify.test;import static io.deolin.commons.simplify.RandN.*;import static io.deolin.commons.simplify.Rand8.*;import static io.deolin.commons.simplify.Print.*;public class RandTest { public static void main(String[] args) { long seed = 123L; ln(r8()); ln(r8(seed)); ln(); ln(nr8()); ln(nr8(seed)); ln(); ln(cr8()); ln(cr8(seed)); ln(); ln(lcr8()); ln(lcr8(seed)); ln(rn(20)); ln(rn(seed, 4)); ln(); ln(nrn(20)); ln(nrn(seed, 4)); ln(); ln(crn(20)); ln(crn(seed, 4)); ln(); ln(lcrn(20)); ln(lcrn(seed, 4)); }}
运行两次的结果