Creare un oggetto solo per chiamare un metodo su di esso e poi scartare dopo che la chiamata è generalmente una cattiva idea. Quindi, una possibile soluzione è convertire quel metodo di istanza in un metodo statico. Puoi anche lasciarlo come metodo di istanza, ma usare solo un'istanza di quella classe per tutto il codice. Quest'ultimo può essere applicato utilizzando il Pattern Singleton, come suggerisce @AJC.
Ma la tua domanda nasconde un problema più profondo. Supponiamo che il metodo doSomething()
sia utilizzato nel contesto della logica aziendale. In tal caso, se crei l'oggetto in quel contesto, o chiami un metodo statico, o ottieni un riferimento all'oggetto tramite Singleton, stai rendendo il tuo codice molto difficile da testare. In questi tre scenari, la chiamata al metodo non può essere derisa da un test di unità perché il test non può controllare come viene istanziato l'oggetto. Quindi, sei bloccato con quella "versione" del metodo, che, a sua volta, può chiamare altri metodi statici o Singletons, che possono creare un'istanza delle loro dipendenze e così via e così via. Pertanto, anche se provi a scrivere un test unitario per quel metodo, finirai per testare un gruppo di classi della tua applicazione contemporaneamente. Inoltre, stai mescolando la logica di business con la creazione di oggetti, violando il principio di singola responsabilità e rendendo più difficile il tuo codice mantenere.
Il tuo codice dovrebbe raramente "prendere" le dipendenze di cui ha bisogno. Invece, dovrebbe solo dichiarare ciò di cui ha bisogno e lasciare la responsabilità di creare tali dipendenze in un'altra classe (in genere chiamate fabbriche ). Questa tecnica di progettazione viene spesso definita dipendenza da iniezione .