Was soll ein Manager tun können.
Er verwaltet Objekte:
- Alle Objekte müssen sich beim Manager registrieren (nicht allein durch den Manager möglich)
- Alle Objekte müssen wieder deregistriert werden
- Zugriff auf alle Objekte (indexed oder linear ?)
Sollte eine Möglichkeit des verwaltens bieten, das heisst eventuell den Zugriff auf die Objekte erleichtern ... weiss nicht inwiefern das möglich ist
(weiss netmal was genau damit gemeint ist)
Das ganze kässt sich Policy gesteuert entwerfen
Folgende Sachen sind dabei festzulegen und in Policies aufzuteilen:
- Typ der Objekte die er speichert
- Singleton (welche Art von Singleton-> Loki)
- Storage (Pointer oder SmartPointer oder handles)
- vector oder liste (oder sogar map), wie werden die Klassen gespeichert
- Threading (SingleThreading/MultiThreading)
Typ:
Der Typ stellt den Objekttyp dar, den der Manager managed.
Es sollte eine Methode zur Registrierung geben ala RegisterObjekt(constTypeRef x);
Singleton:
Jeder Manager sollte ein Singleton sein. Die Art des Singletons wird hier festgelegt.
Wie kann der Manager allerdings Singleton gemacht werden ?
Innerhalb der Klasse ist es nicht möglich einen SingletonHolder-Typ zu definieren der ausserhalb der Klasse zu sehen ist !
Beispiel
Daraus ergibt sich für mich die Konsequenz das das Singleton nicht als Policy in den Manager aufgenommen werden kann.Code:template <class T, template <class>SingletonHolder > class Manager { //typedef SingletonHolder<T,die anderen Typen> SingletonType; // geht net }; //client.cpp typedef Manager<Texture,SingletonHolder<Texture,CreateUsingNew> > TextureManager; SingletonHolder<TextureManager>::Instance()->bla();
Daher muss ein extra typedef in die cpp der jeder gemanagten Klasse eingeführt werden
typedef Manager<Klasse, ....> > KlasseManager;
Storage:
Wie wird das Objekt intern gespeichert und wie greift man darauf zu
Einige Möglichkeiten
- indexed access
ObjectPointer GetObjekt(int i);- iterative access
ObjectIterator begin();- handle access (map)
??? (wie wird handle festgelegt etc..)
Threading:
hmm, diese Policy ist für MultiThreading und Singlethreading zuständig.
(locken der Get und Set Methoden ...)
Da die GetMethode durch vererbung in die Klasse eingeht ist Threading eine von Storage abhängige Policy.
Storage muss die Methoden selber aufrufen
Folgende statische-Methoden sind zu implementieren:
- ??? keine Ahnung, hab noch nie mit gearbeitet ...
Zusammenfassung:
Ungefähr dürfte die Manager Klasse so aufgebaut sein:
Code:template <class T, template <class> Threading, template <class> Storage> class Manager : public Storage<T,Threading> { };
Tja, comments, Vorschläge, Fragen, Erweiterungen ???
Ist noch einiges zu tun. Danach wird eine genaue Beschreibung als Doc abgefasst und für die Implementierung bereitgestellt.


)
Zitieren