Lag / latenza? Chiamo BS su questo. Ci dovrebbe essere esattamente zero overhead da questa pratica. ( Modifica: è stato sottolineato nei commenti che questo può, di fatto, inibire le ottimizzazioni eseguite dalla macchina virtuale HotSpot. Non ne so abbastanza sull'implementazione VM per confermare o negare questo. basando il mio commento sull'implementazione di funzioni virtuali in C ++.)
C'è un sovraccarico di codice. Devi creare tutti i costruttori dalla classe base che desideri, inoltrandone i parametri.
Anche io non lo vedo come un anti-modello, di per sé. Tuttavia, lo vedo come un'opportunità persa. Invece di creare una classe che deriva la classe base solo per il gusto di rinominare, come su di te invece crei una classe che contiene la collezione e offre un'interfaccia migliorata caso per caso? La cache del tuo widget dovrebbe davvero offrire l'interfaccia completa di una mappa? O dovrebbe invece offrire un'interfaccia specializzata?
Inoltre, nel caso delle collezioni, il pattern semplicemente non funziona insieme alla regola generale di usare le interfacce, non le implementazioni - cioè, nel codice di raccolta semplice, si creerebbe un HashMap<String, Widget>
, e poi lo si assegnerà a una variabile di tipo Map<String, Widget>
. Il tuo WidgetCache
non può estendere Map<String, Widget>
, perché è un'interfaccia. Non può essere un'interfaccia che estende l'interfaccia di base, perché HashMap<String, Widget>
non implementa quell'interfaccia e nessuna altra raccolta standard. E mentre puoi renderlo una classe che estende HashMap<String, Widget>
, devi quindi dichiarare le variabili come WidgetCache
o Map<String, Widget>
, e il primo ti perde la flessibilità di sostituire una collezione diversa (forse la pigra collezione di caricamento di ORM) , mentre il secondo tipo di sconfigge il punto di avere la classe.
Alcuni di questi contrappunti si applicano anche alla mia classe specializzata proposta.
Questi sono tutti punti da considerare. Potrebbe o potrebbe non essere la scelta giusta. In entrambi i casi, gli argomenti offerti dal collega non sono validi. Se pensa che sia un anti-modello, dovrebbe nominarlo.