2013-04-25 121 views
0

我正在使用java構建客戶端服務器應用程序(使用NetBeans).. 在客戶端,我有3個類和一個Connection類來處理從/到服務器的數據發送和接收。這3個類使用相同的Connection類,所以我認爲創建一個全局連接將會很有用,每次需要發送/接收數據時,這些連接將被不同的類使用。java中的客戶端服務器

所以從C#和C++我知道你可以聲明一個靜態類,但在Java中是不可能宣佈靜態類..任何想法?

回答

1

引入全局狀態往往是被認爲是不好的做法,但它肯定有它的用例。所以,你可能想考慮單身模式。 Wikipedia on Singleton

在java中,一個簡單的實現看起來是這樣的(未測試的代碼):

public class MyConnectionClass { 
    private static final MyConnectionClass SINGLE_INSTANCE = new MyConnectionClass(); 

    private MyConnectionClass() {} 

    public static MyConnectionClass getInstance() { 
     return SINGLE_INSTANCE; 
    } 
} 

然後你就可以得到只要你需要它使用

MyConnectionClass.getInstance() 

單個實例請請注意,該類有一個私有構造函數。這可以確保,你不能使用

MyConnectionClass not_singleton_anymore = new MyConnectionClass() 

也可以使用枚舉,其中有些人認爲在Java中實現單例模式的最佳方法。 從維基百科複製的示例:

public enum Singleton { 
     INSTANCE; 
     public void execute (String arg) { 
       //... perform operation here ... 
     } 
} 

希望對您有所幫助。

+0

非常感謝!我想過這個實現也:) – Elior 2013-04-25 21:51:20

+0

不客氣。並感謝您的快速接受;-) – 2013-04-25 22:05:03

+0

不客氣..我只是不太確定singelton ..所以我問這個問題..謝謝無論如何:) – Elior 2013-04-25 22:44:17

1

Java中的類的靜態修飾符是隱含的:如果Java中的類中的所有內容都是靜態的,那麼我認爲可以說它是靜態類。

實際上,即使Java確實有靜態類修飾符,其行爲也不同於在每個元素之前放置靜態。

只需用static修改所有內容,你就會好的。如果你這樣選擇,添加一個私人的構造函數,以便它不能被實例化。

+0

好的,謝謝你 – Elior 2013-04-25 21:36:40

1

我無線本地環路建議ü做一個實例,並通過它在埃夫裏其他類的構造函數..所以ü無線本地環路有每個類別的相同的實例。它是無線本地環路的組成關係

+1

這不是一個很乾淨的解決方案。它需要每個方法調用處理服務器/客戶端的額外參數。 – Zyerah 2013-04-25 21:38:40