单例客户端连接器

时间:2012-11-15 20:14:55

标签: java networking connection

说明您有一个聊天程序,您要将数据发送到&从服务器。将客户端连接转换为单例是否明智?或者这会破坏数据流。

我的客户单身人士的例子:

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();
        }
    }

}

2 个答案:

答案 0 :(得分:2)

您的代码存在两个问题:

  • 单身人士非常缺乏灵活性。如果您希望将来实现负载平衡或连接池,那么您的双手就会受到束缚。只允许一个连接。那么重新连接呢?你如何摆脱旧的联系并创建一个新的连接?

  • 在构造函数中连接(或任何具有副作用的操作)不是一个好习惯。想象一下这个类的单元测试

所以我不建议使用单例连接对象。取而代之的是具有ClientConnections方法的Client connect()经理类。这个管理器类跟踪所有打开的连接,可以缓存它们,关闭未使用的,定期测试等等。ClientConnections是一个更好的单身人选。

答案 1 :(得分:1)

如果您不希望每个客户端连接多个连接,请使用单例客户端。对于大多数情况,这应该没问题,除非您希望同时支持发送多个文件。