java带参数的单例_单例与参数在Java

我正在阅读关于维基百科的Singleton文章,我遇到了这个例子:

public class Singleton {

// Private constructor prevents instantiation from other classes

private Singleton() {}

/**

* SingletonHolder is loaded on the first execution of Singleton.getInstance()

* or the first access to SingletonHolder.INSTANCE, not before.

*/

private static class SingletonHolder {

private static final Singleton INSTANCE = new Singleton();

}

public static Singleton getInstance() {

return SingletonHolder.INSTANCE;

}

}

虽然我真的很喜欢这种Singleton的行为方式,我不能看到如何适应它包含参数的构造函数。在Java中执行此操作的首选方法是什么?我要做这样的事情吗?

public class Singleton

{

private static Singleton singleton = null;

private final int x;

private Singleton(int x) {

this.x = x;

}

public synchronized static Singleton getInstance(int x) {

if(singleton == null) singleton = new Singleton(x);

return singleton;

}

}

谢谢!

编辑:我想我已经开始了一场争论的风暴与我的愿望使用Singleton。让我解释我的动机,并希望有人可以提出一个更好的主意。我使用网格计算框架来并行执行任务。一般来说,我有这样的:

// AbstractTask implements Serializable

public class Task extends AbstractTask

{

private final ReferenceToReallyBigObject object;

public Task(ReferenceToReallyBigObject object)

{

this.object = object;

}

public void run()

{

// Do some stuff with the object (which is immutable).

}

}

发生的是,即使我只是将我的数据的引用传递给所有任务,当任务被序列化时,数据被一遍又一遍地复制。我想做的是在所有任务之间共享对象。当然,我可以这样修改类:

// AbstractTask implements Serializable

public class Task extends AbstractTask

{

private static ReferenceToReallyBigObject object = null;

private final String filePath;

public Task(String filePath)

{

this.filePath = filePath;

}

public void run()

{

synchronized(this)

{

if(object == null)

{

ObjectReader reader = new ObjectReader(filePath);

object = reader.read();

}

}

// Do some stuff with the object (which is immutable).

}

}

你可以看到,即使在这里我有一个问题,传递一个不同的文件路径在第一个传递后意味着什么。这就是为什么我喜欢一个商店,这是在答案张贴的想法。无论如何,而不是包括在run方法中加载文件的逻辑,我想把这个逻辑抽象成一个Singleton类。我不会再提供另一个例子,但我希望你能得到这个想法。请让我听到你的想法,一个更优雅的方式来完成我想做的。再次感谢你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值