Secondo un'interpretazione rigida di Object Oriented Design, una classe di utilità è qualcosa da evitare.
Il problema è che se si segue un'interpretazione rigida, è necessario forzare la classe in un oggetto di ordinamento per realizzare molte cose.
Anche i progettisti di Java fanno classi di utilità (java.lang.Math viene in mente)
Le opzioni disponibili sono:
double distance = Math.sqrt(x*x + y*y); //using static utility class
vs:
RootCalculator mySquareRooter = new SquareRootCalculator();
mySquareRooter.setValueToRoot(x*x + y*y);
double distance;
try{
distance = mySquareRooter.getRoot();
}
catch InvalidParameterException ......yadda yadda yadda.
Anche se dovessimo evitare il metodo dettagliato, potremmo ancora finire con:
Mathemetician myMathD00d = new Mathemetician()
double distance = myMathD00d.sqrt(...);
in questo caso, .sqrt() è ancora statico, quindi quale sarebbe il punto nel creare l'oggetto in primo luogo?
La risposta è, creare classi di utilità quando l'altra opzione sarebbe quella di creare una sorta di classe "Worker" artificiale che non ha o non serve molto per le variabili di istanza.
fonte
2009-12-21 22:13:30
'java.lang .Math' è al 100% metodi statici con un costruttore 'private' (non può essere istanziato). – Asaph
Non sono sicuro se questa domanda è stata posta in questo forum. Ma è una cattiva pratica per una classe avere solo campi statici? Ho visto molte di queste classi e secondo me non rientrano in OOP. – ka3ak
@ ka3ak Le classi con campi statici sono parzialmente indirizzate in alcune risposte a questa domanda. –