2010-07-15 46 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是输入和输出插座上的