我已经开始使用Android Big Nerd Ranch指南学习android。 清单9.1设置单例(CrimeLab.java)
public class CrimeLab {
private static CrimeLab sCrimeLab;
private Context mAppContext;
private CrimeLab(Context appContext) {
mAppContext = appContext;
}
public static CrimeLab get(Context c) {
if (sCrimeLab == null) {
sCrimeLab = new CrimeLab(c.getApplicationContext());
}
return sCrimeLab;
}
}
项目 - 我们正在创建犯罪对象列表,我们使用此类来存储列表。
我无法理解清单9.1中提供的Singleton类的需要。为什么我们首先需要这门课?为什么我们需要一个上下文变量,它有什么作用?
我搜索了谷歌并发现该上下文用于通知应用程序的其他部分发生了什么。但是,我还没有得到我们通知CrimeLab的内容?我们可以在没有单身人士课程的情况下创建crimeLab吗?如果是的话,为什么我们将crimeLab用作单身类?
答案 0 :(得分:0)
单身是一类,最多只有一个实例。因此私有构造函数和public static get。
public static get通常是无参数的。原因是如果用不同的参数调用它,那么调用的顺序将导致单例初始化不同,因此你很容易出现竞争条件。
如果没有更多的上下文,我只能得出结论,这样的代码是坏的。
答案 1 :(得分:0)
这不是Android的问题,它只是一种设计模式本身。 我在Android Big Nerd Ranch指南中读过这个例子。清单9.1我们想要存储共享数据,描述了设置单例(CrimeLab.java)以及将其置于单例中的原因。让我们想象一下,当我们在2个地方构造没有单身的CrimeLab对象时:
CrimeLab cb1 = new CrimeLab(context);
CrimeLab cb2 = new CrimeLab(context);
它创建新对象,cb1和cb2中存储的数据不同。
假设您在应用程序中使用数据库,它应该只有一个?是。
但是为了达到相同的目的(单个数据位置),我们可以使用静态方法或属性,但是你需要通过隐藏构造函数来阻止创建对象
private CrimeLab(Context appContext) {
mAppContext = appContext;
}