[英]Singleton Vs static variable
我需要在我的应用程序中使用一个全局计数器,该计数器会为每个请求增加计数。 我将把这个计数器放在一个单独的类中,如下所示:
public class Counter{
private static int count = 0;
public synchronized static update()
{
count += 1;
}
public synchronized static int getCount()
{
return count;
}
}
在应用程序的整个生命周期中,仅存在一个计数器。 既然有一个单身人士,我会从中获得任何好处吗? 创建单个实例而不是使用带有静态变量的类是否更有意义? 有什么好处
我将其设为静态(字段和方法),或者设为非静态。 您似乎有一个必定会造成混淆的组合。
在这种情况下,我将只使用AtomicInteger
:
public enum Counter {
public static final AtomicInteger COUNTER = new AtomicInteger();
}
这样你就可以
import static Counter.COUNTER;
int num = COUNTER.incrementAndGet();
我认为没有必要将其设置为单例或静态。 在逻辑位置(正在生成请求的类的实例变量?)实例化一个新的Counter
,然后从那里使用它。 这样, Counter
类在您需要时仍可在其他地方重用,而您不必担心其他人会抓取和更新您的Counter ...
当类具有状态(具有字段)时,使用单例更为常见。 当类是无状态的时,它是一个实用程序类,通常其方法是静态的。
没有看到这是用Java而不是C ++标记的问题; 无论如何,除非有人要删除它,否则我将其留在这里。
关于静态类成员的事情是,它们与类而不是类实例紧密耦合。 换句话说,静态变量只有一个内存分配,该内存分配将在此类的所有实例(类对象)之间共享。
在上面的代码中,在getCount()方法中,您可以
return this.count;
请记住,静态成员没有此指针,这意味着从类外部进行访问时将使用classname :: static_member对其进行访问,并且在定义类方法时仅使用变量名,就像上面所做的那样。 因此,您的代码应类似于:
return count;
如果只需要一个类成员的副本,那么对于创建的任何数量的类对象,最好使用静态方法,并且-静态方法只能对静态成员进行操作。
如果您不喜欢静态方法和静态成员,那么单例并不是一个坏方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.