我目前正在进行Android
项目,并且我正在使用Firebase。我将在应用程序的大多数FirebaseDatabase
中使用FirebaseAuth和Activities
,而且我必须在每个基础类中设置它们的实例似乎很奇怪对于Activity
。
有没有办法可以在我的项目中实例化这些对象的单个全局实例,以便我可以引用它们?
我想我会在某处创建一个静态类,比如
public static class GlobalVars {
public static final FirebaseAuth AUTH = FirebaseAuth.getInstance();
public static final FirebaseDatabase DB = FirebaseDatabase.getInstance();
}
然后我使用
在另一个班级中引用GlobalVars.AUTH
但我不确定这是不是很好的编程习惯。
感谢任何帮助 谢谢:))
答案 0 :(得分:2)
获取Firebase功能实例的代码已经过优化,可以非常频繁地调用。在每个需要它的类中调用FirebaseAuth.getInstance()
是完全没问题的。
我倾向于为每个类提供我使用的每个Firebase特性的成员字段,然后我在构造函数或onCreate()
中初始化并在该类的其他地方使用。
答案 1 :(得分:0)
你应该使用Singleton,最好的办法就是使用Enum' s。查看Effective Java,Second Edition,Item 3 - 使用私有构造函数或枚举类型强制执行singleton属性。
public enum FireBase {
INSTANCE;
public void firebaseInstace() {
// Your code goes here...
}
}
PS:还要补充一点,使用Enum可以保证您的班级免受序列化或反射攻击。
答案 2 :(得分:0)
您可以使用Singleton
。要创建它,您可以使用以下代码:
public static class FirebaseAuth {
private FirebaseAuth instance;
private FirebaseAuth() {
// private constructor that nobody else can create an instance of your class
}
public static FirebaseAuth getInstance() {
if (instance == null) {
//create instance if necessary
instance = new FirebaseAuth();
}
return instance;
}
}
但你的代码也在运作。我仍然选择Singleton-Pattern,因为它对于大多数程序员来说都是众所周知的。
编辑:正如@ joshsp98所指出的,单身人士被认为是不好的做法。 This article提供了有关何时使用单身人士以及何时避免使用单身人士的非常好的信息。
另外@Klitos Kyriacou指出Firebase已经内置了这个功能 - 所以也许尝试一下?