Se 2 classi hanno le seguenti caratteristiche in comune:
- parte del modo in cui è rappresentato il loro stato (entrambi hanno un contenitore lineare)
 - più metodi identici (codice identico, non solo firma)
 
 Ma non sono sostituibili, cioè: svolgono ruoli diversi. 
Allora come evito di ripetere quei metodi? 
La soluzione ovvia sarebbe ereditaria, ma ho letto: "l'ereditarietà non è per il riutilizzo del codice". (Questo si applica qui? È davvero un caso di riutilizzo del codice?)
Non ti sto deliberatamente dicendo quale lingua, perché spero in una risposta agnostica per la lingua.
I metodi sono lunghe un paio di righe, tutti modificano il contenitore, uno di essi trasforma / estrae una sorta di "risultato finale" dal contenitore. Per ruoli intendo: sostituire l'uno con l'altro sarebbe valido codice eseguibile (nei luoghi in cui vengono utilizzati solo i metodi comuni), ma risulterebbe in errore logico / semantico. Per ereditarietà intendevo che introdurre una 3a classe come base / super con i metodi comuni, ma che sarebbe virtuale. Quindi per sostituzione intendevo sostituire un tipo "fratello" e non un sottotipo.