Singleton(enum) jako ustawienia aplikacji

0

Piszę aplikację gdzie użytkownik, może zmieniać w ustawieniach parę parametrów i potem w różnych miejscach aplikacji te parametry są pobierane. I tak się zastanawiam czy to podejście jest okej? Niby fajnie, bo jedna instancja i łatwy dostęp ale to też może być wadą przecież. Czy takie coś jest w porządku, jakie to może przynieść nieprzyjemne skutki?

public enum Settings {
    INSTANCE;

    private double longitude = 0;
    private double latitude = 0;
    private int refreshTime = 10;

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public int getRefreshTime() {
        return refreshTime;
    }

    public void setRefreshTime(int refreshTime) {
        this.refreshTime = refreshTime;
    }

    public double getLongitude() {
        return longitude;
    }

    public double getLatitude() {
        return latitude;
    }
}

I potem gdzieś w indziej w aplikacji mam np:
Settings settings= Settings.INSTANCE;
double longitude = settings.getLongitude()

2

Enumy powinny być klasami, które nie zmieniają swojego stanu. Nie rób w ogóle takich ściśle globalnych singletonów, bo będziesz miał problem z utrzymywalnością kodu, o pisaniu testów jednostkowych nie wspominając. Zrób sobie zwykłą klasę i wrzucaj jej instancję np. przez konstruktor wszędzie tam, gdzie potrzebujesz.

Oddzielna kwestia: co z dostępem wielowątkowym?

1

@zyxist: a ja bym zrobił to tak że przekazywałbym AtomicReference a same ustawienia zrobił niemutowalną klasą ;)

0

Dokładnie, zgadzam się i widzę jeszcze jedną możliwość implementacji. Jeśli aplikacja ma coś na kształt EventBusa, to można mieć niezmienialną klasę z ustawieniami i po prostu wysyłać zaktualizowaną konfigurację jako zdarzenie. Dzięki temu wszystko, co korzysta z ustawień, będzie mogło zareagować na otrzymanie powiadomienia o nowej konfiguracji i np. mieć szansę się przeładować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1