2010-07-15 42 views
0

適當的設計,我在Java中創建一個通用的「SocketServer的」類採用下列參數: 字符串地址,INT端口,類套接字協議,字符串encryptionType加密,詮釋backlogSize幫助與通用套接字服務器

基本上,我希望其他開發人員能夠在他們的項目中實例化這個類,併爲加密,積壓,地址,端口設置一些簡單的選項..在這一點上他們必須設計協議。 SocketProtocol是一個接口,它支持sendMessage和receiveMessage(以及其他一些接口)。

此時,類的用戶應該只實現SocketProtocol並將類(即MySocketProto.class)傳遞給SocketServer實例,該實例將通過.newInstance實例化每個傳入連接的協議副本( );

這是否有意義?有沒有更簡單的方法來建立這種類型的功能?我不喜歡將類的類型傳遞給服務器的想法,這似乎很奇怪。

感謝所有, 克里斯

回答

1

我想在這種情況下使用Factory pattern。鏈接的維基百科的例子是一個有點冗長,但它可以很簡單:然後

public interface ISocketProtocolFactory { 
    ISocketProtocol buildProtocol(); 
} 

SocketServer構造將採取實施ISocketProtocolFactory某個實例,並請它替新ISocketProtocol S作爲其道理。

這將爲您的用戶在構建ISocketProtocol實例時提供更大的靈活性,請注意擁有類參數的「糟糕感」。

+0

我像這個想法..它確實照顧了類參數。那麼,讓我直截了當地說,ISocketProtocolFactory實現實例將實現用戶實現的ISocketProtocol,然後返回實例化的對象? – 2010-07-15 18:01:21

+0

沒錯。您甚至可以將參數添加到'buildProtocol',並且用戶可能會在某些情況下返回不同的'ISocketProtocol'實現。但在大多數情況下,它只是'返回新的MySocketProtocol()'。 – 2010-07-15 19:01:48

+0

甜。謝謝。聽起來像工廠設計模式符合要求。我很熟悉它,但沒有想到在這種情況下使用它! – 2010-07-15 20:40:53

0

我會假設每個端口都有它自己的協議。考慮到這一點,您可以爲端口指定它。

我在過去做了它的方式是有實現者通過在繼承一個類:

public Interface ProtocolInterface 
{ 
    public void serve(InputStream in, OutputStream out) throws IOException 
... 

其中InputStream和OutputStream是輸入和輸出插座上的