[英]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.