0

想象一下你有一个聊天程序,你想在其中向服务器发送和接收数据。将客户端连接变成单例会很聪明吗?或者这会破坏数据流。

我的客户单例示例:

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

}
4

2 回答 2

2

您的代码有两个问题:

  • 单例非常不灵活。如果你以后想实现负载均衡或连接池,你的双手就束手无策了。只允许一个连接。那么重新连接呢?你如何摆脱旧的连接并创建一个新的连接?

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

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

于 2012-11-15T20:23:09.683 回答
1

如果您不希望每个客户端有多个连接,则使用单例客户端是有意义的。这在大多数情况下应该没问题,除非您想支持同时发送多个文件。

于 2012-11-15T20:21:58.973 回答