I modelli di progettazione sono progetti ricorrenti che non possono essere catturati in una classe o in una libreria. Di solito hanno a che fare con l'interazione di più classi. La libreria standard di una lingua può utilizzare modelli proprio come può fare un altro codice, ad es. la libreria IO Java utilizza il pattern decoratore. Ma il pattern decoratore stesso non può essere catturato in una singola classe o libreria.
Una tipica definizione di design patter (presa da Wikipedia):
In software engineering, a software design pattern is a general
reusable solution to a commonly occurring problem within a given
context in software design. It is not a finished design that can be
transformed directly into source or machine code. It is a
description or template for how to solve a problem that can be used in
many different situations.
(La mia enfasi) Quindi per definizione una libreria standard non può fornire schemi di progettazione come componenti riutilizzabili nello stesso modo in cui fornisce classi regolari come componente riutilizzabile. O per dirla in altro modo: se un pattern di design può essere catturato nel codice riusabile, smettiamo di chiamarlo pattern. List<T>
è un progetto ampiamente utile, ma dal momento che questo può essere catturato in una classe riusabile, di solito non lo chiamiamo "schema" - è solo una classe.
Ma un framework incoraggia e in un certo senso impone l'uso di determinati modelli di design. Per esempio. un framework MVC più o meno costringe a scrivere codice seguendo lo schema MVC.
Ci sono diversi motivi per cui i pattern non possono essere catturati come classe riutilizzabile, a seconda del modello:
-
Il modello è troppo astratto. Per esempio. un "adattatore" è un modello in cui una classe
trasforma un'interfaccia ad un'altra. Il concetto è piuttosto semplice,
ma l'effettiva implementazione dipenderà completamente dalla semantica dei due
interfacce in attuazione. Semplicemente non c'è codice boilerplate condiviso
tra diverse applicazioni del modello Adapter, quindi non può
essere incluso come componente riutilizzabile in una libreria.
-
Il pattern non è possibile implementare in una forma riutilizzabile. Alcuni modelli
sono davvero soluzioni alternative per i limiti della lingua. Per esempio. il visitatore"
pattern è davvero un trucco per consentire un linguaggio a singola spedizione
supporta la spedizione multipla. C'è qualche codice di codice, ma il
il codice boilerplate non può essere generalizzato in modo riutilizzabile. Una lingua
con il supporto integrato per la spedizione multipla non sarebbe necessario il
modello di visitatore in primo luogo.
(E come sottolineato in diversi commenti, l'implementazione Singleton fornita non può essere generalizzata a una classe riutilizzabile, dal momento che le statiche non sono ereditate.)