闲话一二

清明小长假,由于没有回老家探亲,趁着难得的三天假期,可以好好地丰富下自己的知识储备。今天是第一天,上午花了半天时间看了下单例模式,正好解决了最近手头自动化测试工作中碰到的困扰,也顺便了解了下volatile关键字的使用。

也许有人会说,网上关于设计模式的文章很多,为什么还要写设计模式。但是,那毕竟是人家的,没有经过自己的理解、实践、总结、沉淀,是很难化为己用的。至于我写博客的目的,更不是为了博得他人的关注和认可,主要是为了将自己学习过的知识能加深理解,吸收前人的优秀经验和巧妙设计思想,在自己平日的工作中看有没有可以借鉴的地方。当然,如果能有经验丰富的人看了我的博客,不管是在学习工作方式上还是知识内容上给我些许诚恳的提点和意见,本人将感激不尽。个人博客园地址:http://www.cnblogs.com/znicy/

另外,随着知识的积累,很多知识在一段时间不接触后会遗忘,写博客的一大好处就是随时可以找到之前曾经接触的这一片区域,并且还可以抓到当时写博时的思路,很快地回忆起知识的内容。

使用场景

开始介绍单例模式之前,必须要先描述下使用场景,以及自己在代码编写时遇到的痛点。

在很多时候,有些对象我们希望在整个程序只有一个实例,如线程池、数据库连接池、缓存、日志对象、注册表等。而最近,在我的实际工作中,在编写接口自动化代码时就遇到了下列两种场景:

  1. 自动化所有用到的接口,在发送https请求时,都需要包含一个参数sessionId,该参数可以通过登录webserver的接口获取,我希望这个sessiondId是唯一的,且只需要获取一次。

  2. 由于系统的webserver是支持高可用的,即如果一个active webserver挂了,另一个standby webserver就会立即投入工作,此时web host就需要切换。为了支持高可用,我在发送请求时加入了兼容代码:如果捕获了连接异常(ConnectException)就会去尝试switchWebHost。在多线程并发执行测试用例的时候,我希望这个switchWebHo