实现只有一个实例的类

时间:2017-03-10 14:03:07

标签: java android singleton instance

大家好日子!这是我的问题:

我需要为我的应用制作教程。为此,我创建了一个名为TutorialClass的类,其中包含一些我需要从其他几个类调用的方法。工作流程非常类似:

第1课:

//...
if(Tutorial.tutorialStep==Tutorial.TUTORIAL_STEP1){
    Tutorial.TutorialStep1();
    Tutorial.tutorialStep=Tutorial.TUTORIAL_STEP2;
}

第2课:

//...
if(Tutorial.tutorialStep==Tutorial.TUTORIAL_STEP2){
    Tutorial.TutorialStep2();
    Tutorial.tutorialStep=Tutorial.TUTORIAL_STEP3;
}

依旧...... 我使用的所有类,都不必扩展Activity

你可以在我使用的几个类中找到这段代码。 所以,首先我需要创建一个TutorialClass的实例

TutorialClass Tutorial = null;

所以这就是问题:如何在我必须展示教程的所有类中使用此实例?正如您所看到的, tutorialStep 的值必须在所有类中都可见,并且所有类都必须看到该值或更改它,以便让教程继续上。

以下是我的教程类的代码:

public class TutorialClass{

    Context context;
    public static int tutorialStep;

    final int TUTORIAL_STEP1=1;
    final int TUTORIAL_STEP2=2;
    final int TUTORIAL_STEP3=3;
    //...

    TutorialClass(Context context){
        this.context = context;
    }

    public void Tutorial1() { ... }
    public void Tutorial2() { ... }
    public void Tutorial3() { ... }
    //...

}

我读过,存在一个允许达到我的目标的Singleton类,但我注意到它不是最好的解决方案。你有什么解决方案吗?谢谢大家!

1 个答案:

答案 0 :(得分:1)

您需要创建另一个返回TutorialClass

实例的类
public class TutorielInstance {
    private static TutorialClass instance;
    private static Context context;

    public static synchronized TutorialClass getInstance(){
        if(instance==null){
            instance=new TutorialClass(context);
        }
        return instance;
    }


    public  static  void setContext(Context c){
        context=c;
    }
}

然后在您可以使用的活动中

TutorielInstance.setContext(this);
TutorialClass tutorialClass=TutorielInstance.getInstance();