【问题标题】:Implementing a class of only one instance实现一个只有一个实例的类
【发布时间】:2017-03-10 14:03:06
【问题描述】:

大家好!这是我的问题:

我需要为我的应用制作教程。为此,我创建了一个名为 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 类,但我注意到它不是最好的解决方案。你有什么解决办法吗?谢谢大家!

【问题讨论】:

标签: java android singleton instance


【解决方案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;
    }
}

然后在activity中就可以使用了

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

【讨论】:

    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2015-08-06
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多