Problème de pattern - méta-informations associés à une classe

Dans le cadre d’une appli PHP, je me retrouve à coder des Behavior (comportements). J’ai une classe principale abstraite Behavior, et j’ai de un a n classes concrètes dérivant de cette classe abstraite.

Il se trouve que pour chacune de ces classes concrètes, j’ai des méthodes, comme getName() (définie en abstrait dans la classe Behavior) qui donnent des méta-informations sur l’implémentation en question. Seulement voilà, pour avoir accès à ces méta-informations, je suis obligé d’instancier ma classe concrète.

J’aimerai assez ne pas avoir a instancier ces classes pour avoir accès aux méta-informations (parce que le constructeur fait un tas de trucs utiles que dans le cas ou je n’ai pas besoin d’accéder aux méta-informations, et vice versa).

Bref, le problème est: comment associer des méta-informations à une classe? (sachant qu’en PHP et dans pas mal de languages, on ne peut pas rendre abstrait une méthode statique…)

Tu fais une méthode statique non abstraite et dans la classe abstraite tu renvoie un truc genre “gros con ça sert à rien, lit la doc”.

Il me semble qu’en Python (entre autres) tu peux faire du overload de methodes statiques donc ca serait facile a faire.
Pour les languages qui ont des attributs (genre les languages bases sur .NET), tu pourrais utiliser ca comme meta-donnees, plutot que de les stocker en champs membres.
Sinon, si c’est possible, tu peux redesigner ton truc en faisant 2 classes de base: BehaviorDescriptor et Behavior. La premiere est une classe legere qui renvoie les meta-donnees sur la seconde. Ca double le nombre de trucs a declarer, ca demande une 2eme factory (ou un autre paquet de methodes sur ta factory existante) mais ca devrait marcher correctement.

Assez d’accord avec lordabdul pour les descriptors séparés.

Sinon je me demande : pourquoi tu as besoin d’infos sur l’implémentation avant d’instancier ton objet?