Является ли хорошей практикой использование Singleton pattern
для GUI (прикрепление окна для моего случая) в Vaadin
?
Мой сценарий использования: одно окно не может быть отображенодругие пользователи, если он уже используется одним пользователем.
До этого варианта использования я просто добавлял окно в графический интерфейс, как показано ниже:
this.communicationWindow = new CommunicationConfigWindow();
this.configSettingsButton.addClickListener( e -> {
if ( !UI.getCurrent().getWindows().contains( this.communicationWindow )
&& this.communicationWindow != null )
{
this.communicationWindow.init( this.config );
this.getUI().addWindow( this.communicationWindow );
}
} );
Теперь, так как я хочу, чтобы его показывал только один пользователь, вместо
this.communicationWindow = new CommunicationConfigWindow();
я просто превратил его в singleton
, как показано ниже, и просто добавил try/catch
block;
this.communicationWindow = CommunicationConfigWindow.getInstance();
this.communicationWindow = new CommunicationConfigWindow();
this.configSettingsButton.addClickListener( e -> {
if ( !UI.getCurrent().getWindows().contains( this.communicationWindow )
&& this.communicationWindow != null )
{
this.communicationWindow.init( this.config );
try
{
this.getUI().addWindow( this.communicationWindow );
}
catch(IllegalArgumentException ex)
{
Notification.show( "Configuration invalid", Type.WARNING_MESSAGE);
}
}
});
Теперь, это не позволяет многим пользователям отображать это окно (что я и хочу), но есть 3 вещи:
- Я действительно чувствую, что это плохая практика,
- Во время отображения окна пользователь закрывает браузер, и другие пользователи не могут отображать его.
- Я действительно новичок в Vaadin.
Любые подходы, предложения приветствуются.
Спасибо.