咸蛋系列一●《模板模式构建随机对象生成》2 构思

随机对象生成可以说是随机数生成的一个延伸,在实际使用中,我们可能要生成的不是一个简简单单的数字,而是像数字、大小写字符、中文汉字、算数表达式等。

由于其实现相对简单,取各种随机对象的源码网上也比比皆是,因而貌似也没人做一个通用的、可扩展的随机对象生成。

博主要不是因为闲得蛋疼也是不会想到做这个东西的,好了,言归正传。分析随机对象生成,其要点无外乎三点:

1. 设置随机对象集;

2. 获取一个或多个随机对象;

3. 获取一个或多个不重复随机对象;

在这三点中,后两者算法皆固定,仅设置对象集不同,故而完全可以使用模板模式。

就第一点而言,设置随机对象集,我们一般的想法是创建一个集合(数组、List。。)保存所有对象。但我并为采用该方法。具体原因如下:

1. 元素个数可能非常;

2. 元素的获取可能是通过一个算法动态获取,执行之前并不知道具体有哪些元素,或者不想枚举;

3. 设置一个集合,这是已经是一个具体的实现了,模板并不需要知道这些,模板只需要定义一个方法--通过一个索引去获取对应的元素。像下面的代码一样:

/// <summary>
/// 根据实际索引获取对象
/// </summary>
/// <param name="realIndex"></param>
/// <returns></returns>
protected abstract T ElementAt(int realIndex);
时间: 2024-10-25 14:54:45

咸蛋系列一●《模板模式构建随机对象生成》2 构思的相关文章

咸蛋系列一●《模板模式构建随机对象生成》3 自定义扩展,随机生成不重复汉字

目前网上随机生成汉字的源码很多,无外乎生成四个数字,前两个构成区码,后两个构成位,然后使用区位码对应的16进制编码转换成汉字(可参考http://www.cnblogs.com/navicy/archive/2005/05/08/150756.html). 也就是说,没生成一个汉字,需要生成4个随机数,其实,仔细想想大可不如此麻烦. 研究区位码表(http://www.mytju.com/classCode/tools/QuWeiMa_FullList.asp),我们可以发现: 1. 16进制编

Head First 设计模式系列之一----模板模式

开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年的小伙伴们还在外面耍,自己还在那里装B.可是看完的困惑也随之而来,我怎么才能熟练的操练这些模式呢!书上讲的头头是道,可是实际中我们确不知道怎么运用!后面看到别人牛逼的都是随便一个模式都能脱口面而出,还有就是实际项目接触多了,肯定也有一定的职业嗅觉!所以希望自己也能够通过写博客,让自己对设计模式有一个

咸蛋系列一●《随机数生成篇》1 序

随机数在编程开发的时候使用还是比较多的,追常见的当然是验证码,除此之外,在抽奖.游戏之中也有运用.最近闲得蛋疼,就搞了个随机数生成的模板,搏总看官一乐. 先上项目目录: 简单使用: 数字不要4 RandomString rs = new RandomString(); //数字,并且不要4 var sdd = rs.AddProviders(EStringProviders.SingleDigit); sdd[EStringProviders.SingleDigit][0].AddExclude

设计模式之 - 模板模式(Template Pattern)

引入:这几天在看一本讲spring源码的书<SPRING技术内幕>里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplicationContext),类路径加载配置文件(ClassPathXmlApplicationContext),以及根据项目上下文目录(XmlWebApplicationContext)加载配置文件.这个在加载的过程中就使用了模板设计模式,所以就来学习下模板设计模式. 1. 模板设计模式在书中定义:  定义一个

设计模式系列之生成器模式

builder模式主要用于创建复杂对象,着重于复杂对象的内部构建.通过将构建过程与表示分离,同一个构建过程可以生产不同的外部表示.builder模式由导向器和生成器构成,导向器负责构建过程,生成器负责生产对象的外部表示.导向器包含有一个生成器,当需要更换对象表示时,只需要换一个生成器即可. 上篇文章设计芯片设计软件时,abstract factory更加着重于支持创造多个掩模系列上图形的功能.现在我们换一个重点,现在给出一个掩模上所有图形的信息,这个信息可以存储在格式化文件比如xml文件中,为了

设计模式总结篇系列:建造者模式(Builder)

关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是否具有一致的先后顺序,可以将其分为如下两种形式. 一.通过Client.Director.Builder和Product形成的建造者模式 Builder负责Product类对象的具体过程构建,Director负责指导Build,要求Builder按照其指定的顺序去完成Produt的构造.最后通过Bu

抽象类和模板模式

一模板模式的简单规则 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现. 父类中可能包含需要调用其它系列方法的方法,这些被调用的方法既可以由父类实现,也可以由其子类实现.父类里提供的方法只定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖于其子类的辅助. 二模板模式应用 1代码示例  下载 Java代码   public abstract class SpeedMeter { // 转速 private double turnRate; publi

12. 星际争霸之php设计模式--模板模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248192.html============================================

PHP设计模式——模板模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现. UML类图: 角色: 抽象模板角色(MakePhone):抽象模板类,定义了一个具体的算法流程和一些留给子类必须实现的抽象方法. 具体子类角色(XiaoMi):实现MakePhone中的抽象方法,