【问题标题】:Android: use a global object instead of creating new onesAndroid:使用全局对象而不是创建新对象
【发布时间】: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 然后在我的其他类中调用它,那就太好了。

谢谢。

【问题讨论】:

    标签: java android global


    【解决方案1】:

    如果不涉及任何状态,为什么不将这些方法设为静态或考虑单实例模式..

    how to use static methodssingleton pattern

    【讨论】:

    • 谢谢@sandy,能否请您给我一些更精确的信息?
    • 静态方法在大多数情况下通常不鼓励作为一个坏主意,因为它们会使您的设计以后更难更改。单例模式在这里可能是更好的解决方案。
    • @Jules.. 如果不涉及任何州,为什么不..?易于访问......和简单的代码......
    • 谢谢@sandy,我会试试这个。还有一个问题,如果我需要 A 类中的上下文而这不是一项活动,该怎么办?
    【解决方案2】:

    使用静态方法的类比来做到这一点。

    例如:

    public class Helper{
        public static void doSomething(){
            //do something here
        }
    }
    

    现在在你的其他类中,使用上面的方法如下:

    Helper.doSomething();
    

    或者Singleton 模式也可以替代。

    【讨论】:

      【解决方案3】:

      使用单例模式。它允许您跨类使用相同的实例:

      http://www.javabeginner.com/learn-java/java-singleton-design-pattern

      【讨论】:

      • 谢谢@soren.qvist,我会试试的。
      【解决方案4】:
      class A{
          static A a;
          static{
                a = new A();
          }
      }
      

      在所有其他类中使用

      A.a to get the object and call respective methods as
      A.a.xxxx()
      

      【讨论】:

      【解决方案5】:

      我看到以下 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 的变量

      使用哪一个真正取决于您的需求和品味 :-)

      【讨论】:

        猜你喜欢
        • 2017-04-12
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多