Designfrage: public static Variable oder private mit Initialisierung



  • Ich habe eine Klasse DrawingToolkit, die u.a. die Klassen Stamp, Stripe und Banderole zum Zeichnen von Stempeln, Streifen und Banderolen nutzt. Diese Stamp etc. brauchen jedoch eine Instanz des Grafikkontexts von DrawingToolkit.

    Das habe ich bisher so gelöst, dass ich den Grafikkontext von DrawingToolkit als public static deklariert habe:

    public static GraphicsContext graphicsContext = new GraphicsContext([...]);
    

    und in den Klassen Stamp etc. folgendermaßen darauf zugreife:

    DrawingToolkit.graphicsContext.doSomeStuffe([...]);
    

    Diese Lösung ist aber unschön, da public Variablen vermieden werden sollten um unkontrollierbaren Zugriff zu vermeiden.

    Deswegen habe ich mir überlegt, für Stamp etc. eine Methode zu schreiben, die die Klasse mit einem GraphicsContext-Objekt initalisiert, was vermeiden würde,
    dass graphicsContext aus DrawingToolkit public sein muss.

    Da es sich bei graphicsContext ja aber um ein Objekt handelt, hätte die Klasse Stamp immer noch den selben Zugriff auf das Objekt wie bisher. Andererseits scheint mir dieser Zugriff auch erforderlich, weil die Klasse Stamp ja Stempel zeichnen muss und dazu nun einmal Grafikkontext von DrawingToolkit braucht...

    Wie löse ich das elegant?



  • Wenn ich das richtig sehe, möchtest du eigentlich von der Klasse GraphicsContext abstrahieren und in deinem DrawingToolkit alle Zeichenfunktionen bereitstellen.

    Das schreit geradezu nach einem

    private GraphicsContext graphicsContext;
    

    Die Einzigartikeit (static) des Zeichenobjektes würde ich in eine andere Ebene legen und die Klasse DrawingToolkit als Singleton realisieren.


Anmelden zum Antworten