2 waaulwh waaulwh 于 2016.03.07 10:53 提问

java单例模式传参问题 5C

用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;
}
这个该怎么处理?

6个回答

lianshaohua
lianshaohua   2016.03.07 12:41

你的这处情况不适合用单例模式;
如果非要用单例模式也不是不可以,那就把这个实例增加一个设备参数的函数setinfi(),以后调用时如此调用: SSHExec.getInstance().setinfo(connInfo);

u013829202
u013829202   Rxr 2016.03.07 15:43

单利模式。你使用过一次,后来取到的都是同一个实例对象的。 你理解的还是不透彻

broust
broust   2016.03.07 11:51

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
}

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.07 12:58

那要看你的构造函数是怎么使用这个参数的啊, new SSHExec(conn);你是直接用的conn的吗?
而且还有,一旦你使用过一次getInstance后,后面每次取到的都是同一个实例对象的。这也是单利模式的特征啊,就是始终返回同一个实例对象。

qq_20039385
qq_20039385   2016.03.07 14:36

你程序写的就是一个单列,对象只有一个,你可以像楼上说的改成
if(map.get(conn.getRemoteAddress)==null){
ssh = new SSHExec(conn);
}
这样就好似不同的remoteAddress获取不同的对象。

tongyi55555
tongyi55555   2016.03.09 03:05

单例模式考的最多的啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
单例模式如何传参?
首先我们知道单例模式有以下特点   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。然后我们可以通过单例模式来完成以下这道题 Java设计person类,有姓名,年龄,性别。要求:该类至多只能创建一个对象。 代码如下package com.liuyanzhao; class Person { private St
带参数的单例模式遇到的问题
今天使用带参数的单例模式的时候遇到一个问题,先看代码: private APTest(Context c) { mContext = c; } public static APTest singleton(Context context) { synchronized (lock) { if(gInstance == null) { gInstance = new
传递参数的单例模式
传递参数的单例模式   作者 sakurajiang 关注 2016.09.17 14:24* 字数 887 阅读 253评论 2喜欢 1 为什么懒汉式还存在 单例模式我们在项目中会经常使用到,有常见的懒汉式、饿汉式,很多人搞不懂饿汉式既然既是线程安全的又是不需要线程同步,为什么还会存在懒汉式呢?存在即是合理,就论需要在构造函数中传递参数而言(当然这里的参
安卓 单例模式 Singleton 传递简单参数
每逢佳节倍思亲,首先祝福广大编程爱好者中秋快乐~ 单例模式的特点是就是保证你的系统中一个类只有一个实例,在A中设置参数,可在B中直接访问。 下面举一个简单例子: 1.创建一个单例类。 public class Demo12_Singleton { //单例模式实例 private static Demo12_Singleton instance = null;
分析java的传值问题
java传参问题,通过对原始类型的传参和对应用类型的传参分析java的传值问题
单例模式之传递Context参数
单利模式的懒汉模式,在android的源码中应用的还是相当普遍的。在android的开发中,有时候需要一个Context的变量,同时还需要使用单例模式,那么该怎么处理呢? 在getInstance的时候,进行传递context变量。这样的方式,在android源码中还是很普遍的。/** * 单例模式的懒汉模式 * 传递了一个上下文参数 context ,如此就能够实现新建一个线程,能有ui的操作
【Java 单例模式】Java 单例模式在多线程环境中可能存在的问题
在多线程环境下,使用延迟加载的方式实现单例模式,会出现错误。 例如,使用如下方式实现单例类:package study20170307;/** * Created by apple on 17/3/7. */ public class SingleJavaTest { private static SingleJavaTest singleJavaTest = null; publ
深入理解单例模式:静态内部类单例原理
本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理。OK,废话不多说,进入正文。首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常用的单例模式有:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式,我们来逐一分析下这些模式的区别。1.饿汉模式:pub...
JAVA-单例模式之性能探究
单例看似简单,其实大有文章,大部分朋友不一定能写出来。不信您就写一下 private String name =null; private static int index=1; private Singleton(String name) { this.name=name; } private static Singleton obj=null; private s
单例模式(DCL缺陷以及如何安全发布对象)
1. 单例模式: