Il motivo principale per farlo è disaccoppiare il codice da un'implementazione specifica dell'interfaccia. Quando si scrive il codice come questo:
List list = new ArrayList();
il resto del codice sa solo che i dati è di tipo List
, che è preferibile perché consente di passare tra le diverse implementazioni dell'interfaccia List
con facilità.
Ad esempio, supponiamo che stiate scrivendo una libreria di terze parti abbastanza grande e affermate che avete deciso di implementare il nucleo della libreria con uno LinkedList
.Se la tua libreria si basa pesantemente sull'accesso agli elementi di questi elenchi, alla fine scoprirai di aver preso una decisione di progettazione scadente; ti renderai conto che avresti dovuto usare un ArrayList
(che dà O (1) tempo di accesso) invece di un LinkedList
(che dà O (n) tempo di accesso). Supponendo che tu abbia programmato un'interfaccia, fare un tale cambiamento è facile. Si potrebbe semplicemente cambiare l'istanza di List
da,
List list = new LinkedList();
a
List list = new ArrayList();
e voi sapete che questo funzionerà perché avete scritto il codice per seguire il contratto fornito dall'interfaccia List
.
D'altra parte, se si fosse implementato il nucleo della libreria utilizzando LinkedList list = new LinkedList()
, effettuare tale modifica non sarebbe così facile, in quanto non vi è alcuna garanzia che il resto del codice non faccia uso di metodi specifico per la classe LinkedList
.
Tutto sommato, la scelta è semplicemente una questione di design ... ma questo tipo di design è molto importante (specialmente quando si lavora su progetti di grandi dimensioni), in quanto vi permetterà di apportare modifiche specifiche per l'implementazione in seguito senza rompere codice esistente.
fonte
2012-03-24 15:57:47
Oh. Mi dispiace. perché cambio in 'oggetto', quindi lo dimentico. – hqt
@duffymo - La domanda è la seguente: "La nuova lista
Non è una domanda duplicata. Il possibile duplicato ha una domanda generica ma un dettaglio specifico. Trovo che questa domanda nel titolo sia più pertinente/in sincronia con ciò che è effettivamente richiesto. – Dexters