2017-03-10 9 views
0

Guten Tag alle! Hier ist meine Frage:Implementieren einer Klasse von nur einer Instanz

Ich muss ein Tutorial für meine App machen. Dafür habe ich eine Klasse namens TutorialClass erstellt, die einige Methoden enthält, die ich aus mehreren anderen Klassen aufrufen muss. Der Arbeitsfluss ist ganz wie folgt aus:

Klasse 1:

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

Klasse 2:

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

Und so weiter ... Alle Klassen, die ich verwenden, muss nicht verlängern Aktivität notwendig

Sie können dieses Codeelement in mehreren Klassen finden, die ich verwende. Also, zunächst einmal muss ich

TutorialClass Tutorial = null; 

Also hier ist die Frage, eine Instanz von TutorialClass erstellen: Wie kann ich diese Instanz aus allen Klassen, in denen ich meine Tutorial zeigen? Wie Sie sehen können, muss der Wert tutorialStep von allen Klassen sichtbar sein, und alle Klassen müssen diesen Wert sehen oder ändern, um das Tutorial weitergehen zu lassen. Hier

ist der Code meiner Tutorial Klasse:

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() { ... } 
    //... 

} 

ich gelesen habe, dass eine Singleton-Klasse gibt, die mein Ziel erreichen können, aber ich habe bemerkt, dass es nicht die beste Lösung. Hast du irgendeine Lösung? Dank an alle!

+2

Mögliche Duplikat verwenden [Was ein effizienter Weg ist ein Singleton zu implementieren Muster in Java?] (http://stackoverflow.com/questions/70689/what-is-anefficient-way-to-implement-a-singleton-pattern-in-java) – GAlexMES

+0

https: //en.wikipedia .org/wiki/Software_design_muster # Klassifizierung_und_liste. Wähle das gewünschte aus. Sie werden wahrscheinlich mit "Singleton" enden. –

+0

Was sind Ihre Argumente gegen Singleton-Muster? Warum ist es "nicht die beste Lösung"? –

Antwort

1

benötigen Sie eine andere Klasse zu erstellen, die Instanz des 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; 
    } 
} 

und dann in der Aktivität zurückkehren können Sie

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

Es hat funktioniert! Vielen Dank! – Apokalos

Verwandte Themen