Falsches Design? Nur eine Instanz von abstrakter Basisklasse erlauben



  • Hallo 🙂

    Ok, folgendes Problem:
    Ich möchte eine abstrake generische Klasse "ResourceManager" erstellen.
    Diese hat abstrake Funktionalitäten wie "AddResource" "GetResource" "Init" usw.

    Davon möchte ich dann z.b. den SpriteManager oder den TextureManager / SoundManager usw. ableiten, da ich das nicht alles in einer fetten Klasse haben will.

    Allerdings soll es von jedem Manager nur einen geben, also dachte ich mir machste nen Singleton aus der Basisklasse. das geht aber nicht weil sie abstrakt ist...

    wie könnte man das realisieren? oder ist mein design müll 😃 ;)? Falls ja, wieso?



  • Dir bleibt nichts anderes übrig, als deine Kindklassen zu Singletons zu machen. Denn du musst zumindest mal ihre Konstruktoren als private deklarieren und dann brauchst du noch eine Funktion, die dir die richtige instanz deiner klasse auspuckt. und da die vaterklasse nicht weiss, um welche kindklasse es sich handelt, muss die kindklasse diese funktion implementieren.
    Es gibt allerdings einen "hack" (auch wenns nicht wirklich einer is, aber ich finds unschön), mit dem du von einer Template-Klasse Singleton ableiten kannst und so deine Klasse zu eime Singleton machst. (klick)
    Ich würde trotzdem die "von Hand"-Methode empfehlen. Ist ja auch nicht wirklich Aufwand bei 3 Klassen.


Anmelden zum Antworten