public class ViewFactory {
  private static ViewFactory ourInstance;
 
  public synchronized static ViewFactory getInstance() {
    if (ourInstance == null) {
      ourInstance = new ViewFactory();
    }
    return ourInstance;
  }
 
  public String getViewTemplate(RequestContext, String logicalViewName) {
 
    String viewHandle;
    Locale locale = requestContext.getUserLocale();
    String userAgent = requestContext.getUserAgent();
 
    // identyfikacja ViewHandle z mapy widoku
    viewHandle = getViewHandle(logicalViewName, userAgent, locale);
    return viewHandle;
  }
 
  private String getViewHandle(String logicalViewName, String userAgent,
                               Locale locale) {
 
    // wybranie szablonu widoku do wywietlenia na podstawie nazwy logicznej,
    // jzyka uytkownika i typu urzdzenia
    ViewMapKey viewKey = new ViewMapKey(logicalViewName, userAgent, locale);
    return (String)viewMap.get(viewKey);
  }
 
  private ViewFactory() {
    initializeViewMap();
  }
 
  private void initializeViewMap() {
    // metoda poredniczca przy inicjalizacji - te informacje zazwyczaj zostan
    // wczytane z ViewRegistry
    // viewMap.put(logicalViewName, viewTemplateName);
  }
 
  private Map viewMap = new HashMap();
}
