43 votes

Est-ce de l'Usine de la Méthode de création de modèle?

J'ai été en utilisant la méthode de création de modèle pour un certain temps maintenant. J'ai été tout récemment dit que ceci:

public static class ScheduleTypeFactory
{
    public static IScheduleItem GetScheduleItem(ScheduleTypeEnum scheduleType)
    {
        IScheduleItem scheduleItem = null;

        switch (scheduleType)
        {
            case ScheduleTypeEnum.CableOnDemandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.BroadbandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.LinearCableScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.MobileLinearScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
        }

        return scheduleItem;
    }
}

n'est pas une usine méthode de création de motif par mon "Tech" conduire sans me dire pourquoi ou me donner son interprétation. J'ai gentiment demandé une explication et elle m'a dit qu'elle n'avait pas le temps. On m'a dit de simplement renommer. Si je me trompe, alors je vais sans doute accepter que j'ai mis en œuvre ce tort pendant des années. Est-ce de cette manière, VOUS pouvez implémenter la méthode de création de modèle? Merci à l'avance.

31voto

THX-1138 Points 7129

Je suis d'accord pour appeler la méthode d'une "Méthode de Fabrique", bien que le design n'est pas strictement une "Méthode de Fabrique de la tendance".
Ici est un point clé (tiré de Wikipedia):

...L'Usine méthode permet à une classe de reporter l'instanciation des classes."

Depuis votre classe est statique et de la méthode statique (donc non virtuelle), il n'y a pas de "reporter" possible.

Sur le plan conceptuel, notez également, que cette mise en œuvre, bien que fournit l'encapsulation de ne pas dissocier/délai de toute décision.

Cela dit, le même article de Wikipédia ne présenter ce schéma comme une variante de la "Méthode de Fabrique de la tendance".

Résumé du Résumé: À mon avis, cet extrait n'est pas une bonne mise en œuvre de la "Méthode de Fabrique OO Modèle de Conception", puisqu'il ne satisfait pas "d'une classe de reporter l'instanciation des classes." Bien que, personnellement, je librement consulter cette solution comme la "méthode de fabrique".

Pour le rendre réel usine méthode de motif, vous devez autoriser la méthode pour être remplacées par des sous-classes. I. e. usine de classe (ScheduleTypeFactory) doit être extensible (non statique), et GetScheduleItem doit être virtuel.

29voto

Andrew Hare Points 159332

Assurez-vous ressemble à l'usine modèle pour moi. Je ne vois rien de mal avec votre mise en œuvre.

À partir de l'Usine de la méthode de modèle:

L'essence de l'Usine Modèle est à "Définir une interface pour la création de un objet, mais laissez-les sous-classes décider de la classe à instancier. L' Usine méthode permet à une classe de reporter l'instanciation des classes."

C'est exactement ce que vous faites.

Comme une note de côté: une bonne règle de base est que chaque fois que quelqu'un vous dit quelque chose et est incapable ou refuse de fournir une justification pour leur instruction, il ya une bonne chance qu'ils sont qualifiés pour faire la déclaration à tous.

14voto

JaredPar Points 333733

Oui, c'est un modèle de fabrique. Mon seul commentaire est que vous ne silencieusement pour les valeurs de l'enum que vous n'avez pas spécifiquement de la poignée. Que peut être prévu, mais je tiens à ajouter le texte suivant à la fin de ce genre de déclaration

default:
  throw new InvalidOperationException("Invalid Enum Value");

12voto

Ice09 Points 1530

Votre fragment de code est ce que dans la Tête la Première, les Modèles de Conception est appelé "Le Simple fait de l'Usine" (p. 117).
La principale différence de la Méthode de Fabrique de Modèle est le ConcreteCreator (à comparer avec le diagramme dans le coin supérieur droit), qui est une classe simple dans votre cas.
Dans le "vrai patron" de l'usine de la classe est abstraite avec un résumé de l'usine de la classe. Donc, il y a un plus niveau d'abstraction. Cependant, pour de nombreux cas d'utilisation, votre Simple Usine est assez.

Simple D'Usine Simple Factory Méthode De Fabrique De Modèle Factory Method Pattern

8voto

willcodejavaforfood Points 20365

Je pense qu'il est traditionnellement appelé le simple modèle de fabrique pour la distinguer de la "vraie" Abstract Factory modèle. Il pourrait être que vous n'êtes pas adhérer à une sorte de dénomination interne de la pratique. Elle devrait expliquer elle-même cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X