【发布时间】:2012-04-24 18:51:38
【问题描述】:
我的 Android 应用中有一个 A 类,其中有一些方法。 这些方法是公共的,并在其他类(B、C、D、E、F ...)中使用。
是否有可能只从 A 类中创建一次对象,然后在其他类中使用它,或者我必须在每个类中创建新对象。
其实我每个班级都要做(B、C、D、E、F...)
A a = new A();
a.xxxx;
如果我只能创建一次对象 a 然后在我的其他类中调用它,那就太好了。
谢谢。
【问题讨论】:
我的 Android 应用中有一个 A 类,其中有一些方法。 这些方法是公共的,并在其他类(B、C、D、E、F ...)中使用。
是否有可能只从 A 类中创建一次对象,然后在其他类中使用它,或者我必须在每个类中创建新对象。
其实我每个班级都要做(B、C、D、E、F...)
A a = new A();
a.xxxx;
如果我只能创建一次对象 a 然后在我的其他类中调用它,那就太好了。
谢谢。
【问题讨论】:
如果不涉及任何状态,为什么不将这些方法设为静态或考虑单实例模式..
【讨论】:
使用静态方法的类比来做到这一点。
例如:
public class Helper{
public static void doSomething(){
//do something here
}
}
现在在你的其他类中,使用上面的方法如下:
Helper.doSomething();
或者Singleton 模式也可以替代。
【讨论】:
使用单例模式。它允许您跨类使用相同的实例:
http://www.javabeginner.com/learn-java/java-singleton-design-pattern
【讨论】:
class A{
static A a;
static{
a = new A();
}
}
在所有其他类中使用
A.a to get the object and call respective methods as
A.a.xxxx()
【讨论】:
我看到以下 3 种可能性:
1.如果这些只是“正常”的辅助方法,你也可以这样做
B 类扩展 A
并将A的方法继承到B,C,D,E,....
2. 但是,如果您需要对所有其他类或其 B、C、D 实例全局的 A 类内部存储器,则可以使用静态模式,如
class A{
static int myGlobalIntVariable; //which is accessible from everywhere
static void myHelperMethod1() {
}
或 3. 你也可以使用上面提到的单例,它创建一个你在任何地方都可以使用的实例。
作为备注,您可以使用单例模式或静态模式,具体取决于您在访问方法时的偏好。
对于静态模式,您必须这样称呼它们:
A.myHelperMethod();
对于单身人士,你必须这样做:
A.getSingleton().myHelperMethod1(); or A.singleton.myHelperMethod1()
如果您在 A 类中定义了一个名为 singleton 的变量
使用哪一个真正取决于您的需求和品味 :-)
【讨论】: