Как добиться полиморфизма с помощью синглетонов и статических методов? - PullRequest
0 голосов
/ 24 января 2012

Итак, у меня есть

    public class ApplicationConfig{

        public static ApplicationConfig getCurrentInstance(){
           //Something similar to this
        if(instance==null){
          FacesContext fc =FacesContext.getCurrentInstance();
            if(fc==null)
                return null;
            wac = FacesContextUtils.getWebApplicationContext(fc);
        }
        instance =(ApplicationConfig)wac.getBean("appConfig");
          }
          return instance;
        }

    }

Способ получения текущего экземпляра отличается от application1 и application2.Однажды я прочитал это из весны, и однажды я использовал простой шаблон синглтона.

Есть ли способ?оба конфига имеют несколько конфигураций - например,

public boolean isConfiguredForFoo() {
    return getCurrentInstance().getPropertyFoo().equals("foo");
}

РЕДАКТИРОВАТЬ , так что, наконец, я хочу быть в состоянии сделать следующее или что-то в этом роде:

ApplicationConfig.getCurrentInstance().isApplication1();

Где ApplicationConfig - это абстракция или интерфейс, application1 с его реализацией getCurrentInstance и application2 с собственной реализацией.

Более того: вызов isConfiguredForFoo () наконец вызывает getCurrentInstance.Я не могу вытащить эту функцию, потому что в абстрактном классе нет реализации getCurrentInstance и определение статического абстрактного метода недопустимо.Как можно хранить все isXXXXConfigured () в одном месте и придерживаться принципа DRY?

У меня есть зависимости от jsf и spring в applicationConfig для application1 и никаких зависимостей в application2.Как я могу использовать большинство функций из ApplicationConfig из Application1, избегая только той важной функции getCurrentInstance (), которая обращается к этим зависимостям?

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Я не уверен, что именно вы делаете, но следующее может быть полезным:

 public abstract class AppConfig {

    private static AppConfig instance;
    static {
       if (whatever...)
          instance = new AppConfig1(); 
       else 
          instance = new AppConfig2();
    }

    public static AppConfig getInstance() {
       return instance();
    }   
 }

...

 if (AppConfig.getInstance() instanceof AppConfig1)
    ...

Если вы повторно используете некоторый код для конфигурации иногда в Spring, а иногда и за ее пределами, возможно, вам лучше переписать разные классы для обоих случаев.

0 голосов
/ 24 января 2012

Я не понимаю, что вы хотите архивировать?Но я подозреваю, что оба приложения получают ApplicationConfig одинаково.

  • Приложение 1: Spring с factory-method=getCurrentInstance
  • Приложение 2: Ручной вызов getCurrentInstance ();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...