听起来您对某种类型的游泳池感兴趣。
您可以通过不同的方式做到这一点。一种方法是拥有一个处理所有连接的类,这是一个单例。然后,您只需向池请求连接,例如
SSHConnection con = ConnectionPool.getConnection(host, port);
您也可以为此使用代理。在代理中,您实际上得到的是一个占位符,而不是实际的连接。代理与其他实例共享信息,有点像
class ConnectionProxy {
private static SSHConnection connection;
}
连接变量是共享的,当你创建一个新的ConnectionProxy时,你实际上会得到旧的连接,但看起来你得到了一个新的连接。
另一种选择是简单地将实例传递给所有需要它的类。这将允许您跟踪谁做了什么,但您将失去从任何地方获取连接的灵活性。
如果您正在调试,传递一个实例会有所帮助,请这样想。你在一个拥挤的房间里,你有一些钱放在一个需要钥匙才能打开的盒子里。如果你把钥匙交给一个人(需要它的班级),然后离开房间然后回来,钱没了,你可以责怪那个人。相反,如果您只是将钥匙留在盒子旁边的桌子上(实例是全局的)并离开房间,然后回来,钱就没有了,那么祝您找到谁拿走了它。
参考:
*] Proxy pattern - WikiPedia
代理示例
更具体地说,它可能看起来像这样:
public class ConnectionProxy implements Connectable {
// where Connectable is some shared interface between ConnectionProxy
// and SSHConnection. The proxy should "look like" a connection, it just
// hides the actual connection behind the scenes.
private static SSHConnection connection;
public ConnectionProxy() { }
public ConnectionProxy(String host, int port) {
connection = new SSHConnection(host, port);
}
public void connect(String host, int port) {
if (isConnected()) {
return;
}
connection = new SSHConnection(host, port);
}
public void reconnect() {
connection = new SSHConnection(connection.getHost(), connection.getPort());
}
public boolean isConnected() {
return connection != null && connection.isConnected();
}
}
您可以通过实例化或连接来使用该类。
class Program {
public void sendMessage() {
ConnectionProxy proxy = new ConnectionProxy();
if (!proxy.isConnected()) {
// I guess noone connected it
return;
}
proxy.sendBytes();
}
}
然后在您的连接对话框中实例化或连接 ConnectionProxy。您可以添加对多个连接的支持,即不同的主机和端口,只需将变量连接设为列表,然后检查主机和端口以获取正确的连接。您基本上创建了一个连接池,但对于客户端类来说,它看起来像是在创建连接。