Considerare la seguente implementazione del modello di progettazione Decorator:
WordBank
memorizza le stringhe e le restituisce al client tramite il metodo getWords()
.
La classe decoratore, WordSorter
, è una sottoclasse di WordBank
(come nel modello Decoratore). Tuttavia, l'implementazione di getWords()
ordina alcune stringhe e le rimuove, prima di restituire l'array al client.
Ad esempio un WordSorter
potrebbe eliminare tutte le stringhe nel banco che iniziano con la lettera 'a', e solo dopo di ciò restituire l'array al client.
Questo viola il Principio di sostituzione di Liskov ? Poiché alcune implementazioni di WordBank
restituiscono le stringhe mentre altre prima ordinano le stringhe e ne restituiscono solo alcune, non sono sicuro che sia sicuro dire che un WordSorter
può essere utilizzato ovunque sia utilizzato qualsiasi altro WordBank
. O sto capendo che questo principio è sbagliato?