问题描述
- java单例模式传参问题
-
用sshexec连接linux
ConnBean connInfo = new ConnBean(remoteAddress, userName, password);
SSHExec sshExec = SSHExec.getInstance(connInfo); 假设每次传过来的conninfo参数是变的,但是debug查看每次都是第一次的参数。
private static SSHExec ssh;
public static SSHExec getInstance(ConnBean conn)
{
if(ssh == null)
ssh = new SSHExec(conn);
return ssh;
}
这个该怎么处理?
解决方案
if(ssh == null)
ssh = new SSHExec(conn);
return ssh;
}
所以每次都返回第一次生成的instance啊。
如果你的场景是有很多remoteAddress,那么这个public static SSHExec getInstance(ConnBean conn)方法修改下,里面用一个hashMap来存已经初始化的实例。
类似
if(map.get(conn.getRemoteAddress)==null){
xxxxx
}
解决方案二:
你的这处情况不适合用单例模式;
如果非要用单例模式也不是不可以,那就把这个实例增加一个设备参数的函数setinfi(),以后调用时如此调用: SSHExec.getInstance().setinfo(connInfo);
解决方案三:
那要看你的构造函数是怎么使用这个参数的啊, new SSHExec(conn);你是直接用的conn的吗?
而且还有,一旦你使用过一次getInstance后,后面每次取到的都是同一个实例对象的。这也是单利模式的特征啊,就是始终返回同一个实例对象。
解决方案四:
你程序写的就是一个单列,对象只有一个,你可以像楼上说的改成
if(map.get(conn.getRemoteAddress)==null){
ssh = new SSHExec(conn);
}
这样就好似不同的remoteAddress获取不同的对象。
解决方案五:
单利模式。你使用过一次,后来取到的都是同一个实例对象的。 你理解的还是不透彻
解决方案六:
单例模式考的最多的啊
时间: 2024-12-30 01:14:28