我正在使用struts2框架开发一个网站。
我只需要有关何时使用静态方法以及何时为类实例化对象的建议。
例如: 在我的数据库连接中,我使用单例,这样每个用户只能有一个数据库连接(这是正确的吗?) 我想如果我有一个类,让我们说它是一个充满方法的类,只是为了操纵数据库中的数据。我应该将这些方法设为静态吗?或者我应该让这个类成为一个单身人士,所以我的应用程序只有一个类的实例充满方法?
答案 0 :(得分:1)
静态方法非常适合“纯函数”:这些代码不依赖于配置的运行时状态而且没有副作用。
匹配上述描述的方法可以很容易地进行单元测试,因为它没有任何你必须模拟的依赖项,而且模拟它的功能也没有意义。
有时,即使是符合上述描述的函数也可能受益于实用程序对象的实例方法,因为这样可以利用多态来覆盖某些行为。就个人而言,我从来没有这样的需要,因为我选择实现静态的那些方法只有一个有意义的实现。
此外, factory 方法基本上必须是静态的,因为它们是提供实例的方法。工厂方法可以很简单(构造函数周围的一些方便)或具有依赖性,尤其是在某些配置上。在客户端代码中,您可以通过依赖依赖注入框架来避免重量级工厂方法,但通常独立库将通过提供静态工厂方法为其API提供入口点。
答案 1 :(得分:0)
一旦你开始在网络应用程序的上下文中讨论static
和单身人士,你现在谈论的是对static
/ singleton事物的并发访问,这在两个方面是潜在的麻烦:< / p>
static
资源的访问成为应用中所有内容的synchronized
瓶颈通常,您应该在任何多线程环境(例如Web应用程序)中避免使用static
。您的static
事物是数据库连接这一事实会引入其他问题,但也会引入解决方案。使用第三方数据库连接池,例如c3p0,DBCP或类似名称。然后,您根本不必担心管理单例或并发。游泳池足够聪明,可以照顾两者。