Создание синглтон-фабрики

        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;

        }

Как мне избавиться от ifзаявлений здесь.
Я использую отражение.
Пожалуйста помоги. Заранее спасибо.

10.12.2008 12:32:46
Недостаточно кода, чтобы понять, что вы хотите. Что такое msearchtype и bsearchtype? Откуда вы взяли имя?
gcores 10.12.2008 12:42:59
3 ОТВЕТА

Вы просто возвращаете экземпляр SearchInterface? Если так, то почему бы и нет

String fullName = PATH + "." + name;

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

Надеюсь, это поможет.

0
10.12.2008 12:45:12
Мне нужно создать только один экземпляр, то есть синглтон, и у меня есть несколько доменов. Как показано в фрагменте, который я разместил, я проверяю, является ли каждый объект домена пустым, прежде чем создать экземпляр. Я хочу обойти это. пожалуйста помоги.
sam 10.12.2008 12:54:41
@Sam - используйте решение Nicks, оно должно решить вашу проблему, используя карту. Если его нет на карте, вы создаете экземпляр, и это уменьшает количество операторов if в вашем коде. Кроме того, в будущем, если вы добавите больше типов SearchInterface, вам не нужно будет менять код, если только путь не изменится
Jacob Schoen 10.12.2008 13:03:33

Используйте карту:

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

return searchInstances.get(name); 
2
10.12.2008 12:45:32

это даст вам другую перспективу

http://en.wikipedia.org/wiki/Liskov_substitution_principle

0
26.10.2012 15:51:22