Perché contano gli aspetti a livello di progettazione, non gli aspetti a livello di implementazione.
Prendi, ad esempio, il modello di fabbrica.
Il concetto chiave è che tu fornisci un punto di accesso centrale per produrre in modo trasparente varie istanze di un tipo di dati astratto, con l'obiettivo di esporre solo la fabbrica e l'ADT, ma non le stesse implementazioni.
La factory può essere una classe, un metodo statico o una funzione libera e l'ADT che essa crea può essere restituita dall'interfaccia, dalla classe base o dallo stile di programmazione dinamica, come un tipo non specificato (ma documentato per contenere alcuni membri). Le fabbriche possono essere utilizzate per creare istanze di dati puri, classiche classi data-con-codice, classi che si limitano a racchiudere un metodo o anche solo funzioni (lambda, puntatori di funzione o qualsiasi meccanismo fornito dal linguaggio). Questi sono i dettagli di implementazione , mentre il principio design rimane lo stesso: fai astrarre un tipo di dati polimorfico fornendo solo un'interfaccia comune e un meccanismo factory per creare istanze in modo trasparente.