2009-11-06 6 views

Répondre

5

Une réponse à une question ancienne, mais la L'affiche originale demandait ce que signifie la ligne, et non les alternatives qui peuvent être utilisées.

La ligne crée une instance d'une implémentation IDfQuery à partir d'une méthode usine dans une instance d'un objet créé par la méthode factory statique dans une classe DFCUtils. Cet objet est ensuite affecté à une variable.

Ainsi: -

  • DfcUtils = Une classe qui contient une méthode statique appelée getClientX()
  • getClientX() = une méthode de fabrication statique qui renvoie une instance d'un objet
  • getQuery () = une méthode usine dans l'objet retourné par getClientX(), qui renvoie un objet qui implémente IDfQuery;
  • requête = La variable utilisée pour faire référence à la nouvelle instance IDfQuery

Ceci est un modèle d'usine typique, où la méthode/fonction getQuery() détermine quel type d'objet à retourner, en fonction des règles ou des paramètres de configuration. Ceci est préférable à la création d'une instance d'une classe concrète, lorsque plusieurs implémentations d'une interface sont disponibles. Généralement, une fabrique agit comme un amorceur de classe, initialisant les propriétés avant de vous renvoyer l'objet.

Essentiellement, vous pouvez avoir une méthode de fabrication contenant une condition comme une instruction switch qui choisit quelle mise en œuvre pour revenir, savoir que la COI (inversion de contrôle): -

public static IDfQuery getQuery(){ 
    IDfQuery returnValue; 

    switch (getDayOfWeek()) { 
     case "Monday" : returnValue = new MondayQuery(); break; 
     case "Tuesday" : returnValue = new TuesdayQuery(); break; 
     case "Wednesday" : returnValue = new WednesdayQuery(); break; 
     case "Thursday" : returnValue = new ThursdayQuery(); break; 
     case "Friday" : returnValue = new FridayQuery(); break; 
     case "Saturday" : returnValue = new SaturdayQuery(); break; 
     case "Sunday" : returnValue = new SundayQuery(); break; 
     default: returnValue = null; break; 
    } 

    return returnValue; 
} 

public static String getDayOfWeek(){ 
    return new SimpleDateFormat("EEEE").format(new Date()); 
} 
+0

Vous avez manqué le point de ma réponse. Ce n'est pas le modèle d'usine ici. Ce qu'il fait est exactement 'new DfQuery()'. Le code existe également pour que vous puissiez avoir la même chose en Java qu'en VB. –

6

Vous pouvez en toute sécurité le remplacer en Java avec

IDfQuery query = new DfQuery(); 

Cette approche avec une méthode d'usine vient les vieux jours Docbasic qui a obtenu limités par ce que COM peuvent ou ne peuvent pas faire

+0

Désolé une nouvelle meilleure réponse est à venir! Abooth l'explique mieux, plus fort, plus vite #daftpunkstyle – enguerran

+0

Il est vrai qu'il explique mieux le patron d'usine. Mais le modèle d'usine n'est pas la motivation ici pour le code Documentum ici. COM est –

0

On peut utiliser le

IDfQuery query = new DfQuery(); 

approche

Le guide DFC en cours, mais recommande clairement en utilisant la classe usine com.documentum.com.DfClientX pour obtenir de nouvelles instances d'objets tels que DfQuery au lieu d'invoquer directement le constructeur