2009-06-10 11 views
2

Lorsque mon application démarre, elle doit obtenir une instance de la classe DAL correcte (actuellement 4) en fonction de l'utilisateur connecté. Certains utilisateurs tirent certaines bases de données.Est-il toujours considéré comme une usine si les objets retournés par l'usine sont statiques?

Est-ce encore considéré comme un modèle "d'usine" si au lieu d'instancier des instances de ces classes DAL, je renvoie simplement l'instance statique correcte de celui-ci? Je n'ai pas besoin de créer continuellement ces objets puisque tous les utilisateurs peuvent les partager.

psuedocode:

public class RepositoryFactory 
{ 
    public static IRepository repoA = new FranksLumberRepo(); 
    public static IRepository repoB = new LowesHardwareRepo(); 
    public static IRepository repoC = new HackmansHardwareRepo(); 
    public static IRepository repoD = new TomsHardwareRepo(); 

    public IRepository createRepo(User currentUser) 
    { 
     switch(User.Store) 
     { 
      case FrankLumber: 
        return repoA; 
      case LowesHardware: 
        return repoB; 
      case Hackmans: 
        return repoC; 
      case TomsHardware: 
        return repoD; 
      default: 
        throw exception; 
     } 

    } 
} 

Répondre

4

Légère précision sur votre terminologie. Les objets ne sont pas statiques seulement les références. Les objets sont des instances qui ont au moins une référence statique. Lorsque vous renvoyez l'objet, vous renvoyez simplement une référence à cet objet. Il n'a aucune idée qu'il y a un statique qui le maintient dans une autre zone.

Mais oui, ceci est un modèle d'usine valide.

2

Ce serait un cas d'un modèle "Abstract Factory", en fait.

+0

Ceci est un bon exemple d'utilisation d'un motif Usine abstraite. –

+0

Après avoir lu la page Wikipedias sur Abstract Factory Pattern, il semblerait qu'une Usine abstraite soit utilisée pour renvoyer une sous-fabrique elle-même, qui peut ensuite être utilisée pour instancier des objets. Ce n'est pas le cas avec le code ci-dessus, non? – mmcdole

+0

Il n'y a aucune AbstractFactory dans l'exemple. Où est l'abstrait et où est la fabrique de béton? – TimW

1

Le motif d'usine est essentiellement une abstraction (au sens général du terme). Même si vous renvoyez les objets statiques, vous ajoutez toujours une couche d'abstraction, ce qui est bon et devrait être considéré comme faisant partie du modèle d'usine en général.

0

Ce serait une usine singleton.

+0

+1 pour une belle période :) – Aamir