Jak wspominasz w swoim tytule, obiekty są klasami singleton, a nie klasami metod statycznych, o czym wspominasz w tekście swojego pytania.
I jest kilka rzeczy, które sprawiają, że obiekty scala są lepsze od obu statycznych i singletonów w świecie java, więc używanie ich w scala jest całkiem "normalne".
Po pierwsze, w przeciwieństwie do metody statyczne, metody obiektów są polimorficzny, dzięki czemu można łatwo wprowadzić obiektów jak zależnościami:
scala> trait Quack {def quack="quack"}
defined trait Quack
scala> class Duck extends Quack
defined class Duck
scala> object Quacker extends Quack {override def quack="QUAACK"}
defined module Quacker
// MakeItQuack expects something implementing Quack
scala> def MakeItQuack(q: Quack) = q.quack
MakeItQuack: (q: Quack)java.lang.String
// ...it can be a class
scala> MakeItQuack(new Duck)
res0: java.lang.String = quack
// ...or it can be an object
scala> MakeItQuack(Quacker)
res1: java.lang.String = QUAACK
To sprawia, że można je było stosować bez napięty sprzęgła i bez promowania stan globalnej (które są dwa zagadnienia ogólnie przypisywane zarówno metodom statycznym, jak i pojedynczym).
Potem jest fakt, że usuwają wszystkie elementy, które sprawiają, że singletony są tak brzydkie i jednoznacznie wyglądające w języku Java. Jest to często pomijany punkt, moim zdaniem, i część tego, co sprawia, że singletony są tak źle postrzegane w Javie, nawet gdy są bezpaństwowcami i nie są używane jako globalne państwo.
Ponadto, wzorzec, który trzeba powtarzać we wszystkich singletach java, nadaje klasie dwie obowiązki: zapewnienie, że istnieje tylko jeden przypadek i robi to, co powinien. Fakt, że scala ma deklaratywny sposób określenia, że coś jest singletonem, zwalnia klasę i programistę z łamania zasady jednej odpowiedzialności. W scala wiesz, że obiekt jest singletonem i możesz po prostu uzasadnić, co robi.
Czekaj, jeśli są one wolne od państwa, dlaczego są one nawet obiektami, a nie tylko funkcjami? – RonaldBarzell
Nie musisz umieszczać funkcji w czymś, co jest moim pytaniem. Mam kilka powiązanych funkcji, są one wewnątrz obiektu, po prostu jako pojemnik. Czy jest to uważane za najlepszą praktykę w Scali, czy nie. – monkjack
Oh ok. Źle zrozumiałem. Dziękuję za wyjaśnienie. – RonaldBarzell