Avant d'écrire la question que je lis les références suivantes:Quels sont les avantages réels de l'utilisation de l'usine abstraite dans l'exemple suivant, au lieu de la méthode usine?
- Factory Method Vs Abstract Factory
- Abstract Factory vs Factory Method (scope)
- Abstract Factory, Factory Method, Builder
- Factory, Abstract Factory and Factory Method
- Differences between Abstract Factory Pattern and Factory Method
Je vois que beaucoup comme moi ont eu difficile y "saisir" les différences concrètes entre Abstract Factory et Factory Pattern. Je ne suis pas familier avec les modèles de conception, je suis tombé sur cet exemple http://www.oracle.com/technetwork/java/dataaccessobject-138824.html et j'essaie d'approfondir le sujet.
En comparant, je vois que pour 3 DTO nous avons:
1) Résumé usine
- 1 classe abstraite (avec 3 méthodes abstraites et 3 commutations cas);
- 3 classes de fabrique pour le type de persistance (chacune avec 3 méthodes pour obtenir des DAO DTO)
- 3 interfaces et 9 DAO.
2) Méthode de fabrication:
- 3 classes d'usine, une pour chaque interface (chacun avec 3 interrupteur cas);
- Peut-être que je peux créer 3 superclasses à partir desquelles étendre les classes DAO pour ne pas dupliquer le code, tel que celui pour la connexion à la base de données;
- 3 interfaces et 9 DAO.
Du point de vue de la quantité de code je ne vois pas de différences substantielles. Dans les cas où vous devez ajouter un nouveau support de persistance ou une nouvelle interface/DTO, les différences sont minimes (et complémentaires).
Du point de vue du client:
1) Résumé usine:
public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;
DAOFactory daoFactory = DAOFactory.getDAOFactory(PERSISTENCE_TYPE);
CustomerDAO cDAO = daoFactory.getCustomerDAO();
AccountDAO aDAO = daoFactory.getAccountDAO();
OrderDAO oDAO = daoFactory.getOrderDAO();
2) Méthode d'usine:
public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;
CustomerDAO cDAO = CustomerDAOFactory.getCustomerDAO(PERSISTENCE_TYPE);
AccountDAO aDAO = AccountDAOFactory.getAccountDAO(PERSISTENCE_TYPE);
OrderDAO oDAO = OrderDAOFactory.getOrderDAO(PERSISTENCE_TYPE);
Y at-il un avantage à utiliser un DAOFactory en ce qui concerne la persistance tapez et renvoie tous les DAO liés à ce support au lieu d'utiliser plusieurs DAOFactory pour chaque DTO pour obtenir le DAO pour le type de persistance utilisé? Pour l'instant, je ne vois que des différences esthétiques et conceptuelles dans l'utilisation de l'usine abstraite, y a-t-il aussi un avantage d'utilité que je ne peux pas saisir pour mon ignorance au sujet de la conception de logiciel?