2015-07-03 67 views
0

我已经开始使用Android Big Nerd Ranch指南学习android。 清单9.1建立单(CrimeLab.java)Singleton和Context

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用作单身课程?

回答

0

这不是Android的问题,它只是一个设计模式本身。 我已阅读Android Big Nerd Ranch指南中的此示例。代码9.1设置单身人士(CrimeLab.java)和单身人士的理由是我们想要存储共享的数据。让我们想象一下,当我们构造不单身的CrimeLab对象在两个地方:

CrimeLab cb1 = new CrimeLab(context); 
CrimeLab cb2 = new CrimeLab(context); 

它创建新的对象,并在CB1和CB2存储的数据是不同的。

想象一下你在应用程序中使用数据库,应该是只有一个?是。

但目标相同的目的(单数据的地方),我们可以使用静态方法或属性,但是你需要通过隐藏构造

private CrimeLab(Context appContext) { 
    mAppContext = appContext; 
} 
+0

哦防止创建对象!我们需要上下文来告诉应用程序发生了什么,以便所有数据都能很好地集中在一个地方。我对吗?非常感谢你 –

+0

不,我们只需要在这里的上下文,如果我们*需要*其信息CrimeLab对象。否则,您可以删除它,因为它本身就是一个参数。数据在一个地方是因为单例实现(一个静态属性): private static CrimeLab sCrimeLab; –

0

单身人士是一类人,其中最多只能有一人。因此,私人构造函数和公共静态获得。

公共静态get通常是无参数的。原因是,如果使用不同的参数调用它,那么调用顺序将导致单例初始化的方式不同,因此您很容易出现竞争条件。

没有更多的上下文我只能断定这样的代码是不好的。