2008-12-10 5 views
0
 String fullName = PATH + "." + name; 
     Class cl= Class.forName(fullName); 
     if(name.equalsIgnoreCase("MobileSearch")){ 
      if(msearchType==null){ 
       msearchType=(SearchInterface)cl.newInstance(); 
      } 
      return msearchType; 

     } 
     if(name.equalsIgnoreCase("BookSearch")){ 
      if(bsearchType==null){ 
       bsearchType=(SearchInterface)cl.newInstance(); 
      } 
      return bsearchType; 

     } 

Comment se débarrasser des instructions if ici.
J'utilise la réflexion.
S'il vous plaît aider. Merci d'avance.Création d'une fabrique singleton

+0

Code Il ne suffit pas de comprendre ce que vous voulez. Qu'est-ce que msearchtype et bsearchtype? D'où tirez-vous le nom? – gcores

Répondre

0

Vous venez de renvoyer une instance d'une SearchInterface? Si oui, pourquoi?:

String fullName = PATH + "." + name; 

Class cl= Class.forName(fullName);     
if(searchType==null){         
    searchType=(SearchInterface)cl.newInstance(); 
}       
return searchType; 

Espérons que ça aide.

+0

J'ai besoin de créer une seule instance, c'est-à-dire un singleton et j'ai plusieurs domaines. Comme indiqué dans l'extrait que j'ai posté je vérifie si chaque objet de domaine est nul avant de créer l'instance.je veux un travail pour cela. aidez s'il vous plaît. –

+0

@Sam - utilisez la solution Nicks cela devrait résoudre votre problème, en utilisant une carte. Si ce n'est pas dans la carte, vous créez l'instance et cela réduit le nombre d'instructions if dans votre code. Plus à l'avenir si vous ajoutez plus de types SearchInterface, vous n'aurez pas besoin de changer votre code à moins que le chemin change –

2

Utilisez une carte:

if (!searchInstances.containsKey(name)) 
{ 
    searchInstances.put(
    name, 
    (SearchInterface)Class.forName(PATH + "." + name).newInstance() 
); 
} 

return searchInstances.get(name);