Ayant finalement commencé à essayer sérieusement dapprendre quelques schémas de base (très tard dans la carrière, mais cest « une autre histoire), jessaie de comprendre mon Dirigez-vous vers les différences entre le modèle Factory et Abstract Factory.

Quelles sont les principales différences entre ces deux modèles?

Je comprends que la méthode Factory crée des objets par héritage et Abstract Factory le fait à travers la composition dobjets, mais dun point de vue pratique, jai toujours du mal à visualiser exactement comment chacun deux fonctionne.

Commentaires

  • stackoverflow.com/questions/1001767/…
  • Pour clarifier, voulez-vous dire " Méthode dusine " lorsque vous dites " Modèle dusine "? Si vous parlez du Gang of Four patterns, il ny a pas de pattern Factory, mais il y a Abstract Factor y et méthode dusine.
  • Oui – méthode dusine.
  • Pour être honnête, les deux phrases semblent être assez souvent interchangées.
  • Ah, méthode dusine. Une solution de contournement pour le fait que new nest ' ta méthode (dans certains systèmes dobjets – certes courants -).

Réponse

La Méthode dusine est généralement catégorisé par une instruction switch où chaque cas renvoie une classe différente, en utilisant la même interface racine afin que le code appelant nait jamais besoin de prendre des décisions concernant limplémentation.

Pensez à une usine de validation de carte de crédit qui renvoie un validateur différent pour chaque type de carte.

public ICardValidator GetCardValidator (string cardType) { switch (cardType.ToLower()) { case "visa": return new VisaCardValidator(); case "mastercard": case "ecmc": return new MastercardValidator(); default: throw new CreditCardTypeException("Do not recognise this type"); } } 

La Abstract Factory est lendroit où vous avez plusieurs classes dusine concrètes (pas des méthodes dusine) dérivées dune interface qui peuvent renvoyer de nombreux types différents de différentes méthodes.

Pensez à un gestionnaire de jeu déchecs avec une classe différente pour chaque ensemble de règles de variantes.

public class StandardChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class HexagonalChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new HexagonalChessBoardMapper(); } public IKingMover GetKingMover() { return new HexagonalChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class SpeedChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new SpeedChessMoveClock(); } } 

Une usine abstraite , tout comme une stratégie, est souvent sélectionnée à l’aide d’une méthode d’usine, mais il n’est pas nécessaire de les combiner pour que ce soit son propre modèle.

Commentaires

  • Cette explication de la méthode Factory est-elle correcte? Ce que ' s à propos de " Le modèle de méthode dusine repose sur lhéritage, car la création dobjet est déléguée à des sous-classes qui implémentez la méthode de fabrique pour créer des objets ". Donc, lexemple ressemble plus à Static Factory.
  • @SerG Eh bien, pour être honnête, vous ' avez repris cette citation de Wikipédia, sur une page qui lisait très différemment il y a trois ans. Je dirais que la page Wikipédia actuelle se contredit à plusieurs endroits, mais je nai ' pas le désir de me mêler de cela. Ce que je concéderais, avec le recul, cest que lexemple que jai ' fourni ici est un type spécifique de méthode dusine, connue sous le nom de méthode dusine paramétrée. Mais la différence entre la méthode dusine et lusine abstraite est valable pour tous les types de méthode dusine.
  • La même déclaration que ma citation existe dans GoF " Design Patterns ". Et la FM paramétrée y est également décrite.
  • La partie importante est que lusine donnera à lappelant un objet approprié, en fonction de la situation particulière, et lappelant ne ' t besoin de savoir quelle est exactement la classe de cet objet, et ' t besoin de savoir comment lobjet particulier a été choisi, tant que lobjet prend en charge une interface que le lappelant est au courant.
  • Vous devez indiquer clairement dans votre réponse que votre exemple nest pas un modèle de méthode dusine typique, mais une spécialisation nommée méthode dusine paramétrée. Et écrivez sur la définition de la méthode dusine typique, car elle est actuellement erronée. Jétais en train dapprendre le modèle de méthode dusine, jai tout compris, puis jai lu cette réponse qui montre le modèle de méthode dusine comme quelque chose de différent et jétais confus. Il ny a aucune information indiquant que cet exemple nest pas un modèle de méthode dusine typique. Merci à SerG pour lavoir indiqué dans le commentaire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *