说明您有一个聊天程序,您要将数据发送到&从服务器。将客户端连接转换为单例是否明智?或者这会破坏数据流。
我的客户单身人士的例子:
public class Client {
private static Client client;
private final int portNumber = 7070;
private Socket socket;
private Client(){
connect();
}
public static synchronized Client getClient(){
if (client == null) {
client = new Client();
}
return client;
}
public void connect(){
try {
InetAddress adr = InetAddress.getByName("localhost");
socket = new Socket(adr, portNumber);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
您的代码存在两个问题:
单身人士非常缺乏灵活性。如果您希望将来实现负载平衡或连接池,那么您的双手就会受到束缚。只允许一个连接。那么重新连接呢?你如何摆脱旧的联系并创建一个新的连接?
在构造函数中连接(或任何具有副作用的操作)不是一个好习惯。想象一下这个类的单元测试
所以我不建议使用单例连接对象。取而代之的是具有ClientConnections
方法的Client connect()
经理类。这个管理器类跟踪所有打开的连接,可以缓存它们,关闭未使用的,定期测试等等。ClientConnections
是一个更好的单身人选。
答案 1 :(得分:1)
如果您不希望每个客户端连接多个连接,请使用单例客户端。对于大多数情况,这应该没问题,除非您希望同时支持发送多个文件。