假设您有一个与数据库交互的系统。由于系统大量使用数据库,几乎每个子程序都遵循这种模式:
foo(database, rest, of, arguments)
这很快就被注意到了,因为 foo 是一个更大对象的一部分,所以连接变量被移动到一个对象变量中。不幸的是,这意味着每个模型对象的构造函数都接受这个参数。
因此,您决定创建一个可以生成与数据库的连接的模块。由于与数据库的连接成本很高,因此连接被缓存,并且该缓存值在以后的调用中返回。
你刚刚创建的是一个单例。这是开发社区中普遍反对的一种模式。再说一次,DRY 是一个受到鼓励的原则,甚至比不鼓励单例模式更是如此。
那么哪个更好呢?您的选择是增加进入每个函数调用(或至少是构造函数)的参数数量,或者创建一个单例。有没有我没有看到的第三种选择?
编辑:反对单身人士的文章是http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx。我认为那里提出的论点是有道理的,我希望反单例阵营能够解决这个设计问题。