单一抵押贷款
约翰回忆起了他过去在银行工作时的一段故事,他们开发了一款客户端应用程序,帮助销售代理计算抵押贷款付款并向客户显示图表。该应用程序很成功,但后来代理请求了一个移动网页版本,以便他们可以在手机上使用。最初的想法是将其连接到后端主机,但由于缺乏主机开发人员,他们决定将抵押贷款计算对象封装在一个Web服务中。Web服务经过测试,工作良好,但有时会产生荒谬的结果,这些结果难以重现和诊断。问题最终被发现是由一个单例对象引起的,该对象没有限定到单个请求,允许同时请求相互干扰。单例对象是原始客户应用程序的遗留物,在那里不需要强制唯一性。计算器持有状态,可能不应该是一个单例。修复非常简单,就是停止使用单例模式,确保每个请求都获得计算器的实例。这个经验表明了模式的误用,强调了在软件开发中应用设计模式时的重要性。这个故事展示了一个看似简单的问题可以有一个复杂的原因,以及如何通过对代码和设计的仔细审查可以找到一个简单的解决方案。