在Java中,我有两个类,每个类从Singleton类中获取值,但它似乎在更改Singleton中的值,我只想要一个本地副本。这是我班上发生的缩短版本。
method.getName()应返回“Abbey”,就像之前创建的那样
public class MethodFragment1 extends Fragment {
private Method method = MethodLab.get(getActivity()).getMethod();
method.setName("Test");
}
public class MethodFragment2 extends Fragment {
private Method method = MethodLab.get(getActivity()).getMethod();
System.out.println(method.getName());
}
输出为“测试”
这两个课程都没有从Method
班Singleton
获得MethodLab
的本地副本,如果不是,我如何获得本地副本?
答案 0 :(得分:1)
因为它是单例 - 它为所有调用者返回相同的对象。这是单例模式的全部要点 - 所有调用者都获得相同的实例。如果您想为每个调用者设置单独的实例 - 只需在每次有人调用getMethod()
时创建新实例:
Method getMethod()
{
return new Method();
}
基本上,目前尚不清楚你要做什么。或者你可以在每次有人打电话MethodLab.get()
时返回“提供方法的东西”的单独实例。很难说没有看到你的班级结构
修改强>:
如果要向调用者提供对象的副本,可以克隆MethodProvider
(不知道MethodLab.get()
返回的内容:))。请注意,您需要在完成后推回更改:
public class MethodLab
{
private static MethodProvider provider = null;
public static MethodProvider get()
{
//Not thread safe...
if(provider == null)
{
provider = new MethodProvider();
provider.getMethod().setName("Abby");
}
return provider.clone();
}
public static set(MethodProvider newProvider)
{
provider = newProvider;
}
}