OVH Cloud OVH Cloud

Abstract Fatory ou Object Factory

1 réponse
Avatar
Michael
Bonjour à tous,

j'ai les classes suivantes:

class Sequence (virtuelle pure)
class Preview : public virtual Sequence (virtuelle pure)
class Track : public virtual Sequence (virtuelle pure)

class Video : public Track, public Preview
class Image : public Track, public Preview
class Titre : public Preview

Je ne dois créer que les classes Video, Image et Titre.

Je pensais créer une factory. J'ai lu Modern C++ Design d'Alexandrescu où
il donne l'exemple d'une object factory et d'une abstract factory.

Seulement je ne sais pas laquelle correspond le mieux à mes besoins...

Egalement, dans le bouquin, il crée les objets avec des constructeurs sans
arguments. Je suis là aussi obligé de faire comme ça et de définir par la
suite les caractéristiques de mes différents objets?

Ensuite il faudrait que je puisse trier ces séquences, déplacer une
séquence par rapport aux autres, etc...

Est-ce là aussi le rôle de la factory? Ou bien faut-il une autre classe qui
ne s'occuperait que de ça?

Merci d'avance pour vos réponses

Mike

1 réponse

Avatar
Arnaud Meurgues
Michael wrote:

Seulement je ne sais pas laquelle correspond le mieux à mes besoins...


Difficile de vous répondre sans connaître ces besoins.

Si votre but est de ne pouvoir instancier les classes abstraites, il
suffit qu'elles aient une fonction virtuelle pure pour l'empêcher.
Sinon, vous pouvez aussi mettre leur constructeur protected (seules les
sous-classes pourront appeler leur constructeur).

Ensuite il faudrait que je puisse trier ces séquences, déplacer une
séquence par rapport aux autres, etc...

Est-ce là aussi le rôle de la factory? Ou bien faut-il une autre classe qui
ne s'occuperait que de ça?


A priori, une factory ne sert qu'à l'instantiation. Si vous stockez les
objets quelque part, la factory n'en a cure. Une structure de données du
genre std:list pourrait correspondre à votre besoin (ensemble ordonné,
insertion facile (0(1)) pour déplacer les séquences,...).

--
Arnaud