Il programma era partito con lo scopo di confrontare il totale calcolato in modo "tradizionale" e col pattern Visitor, poi ho pensato di modificarlo togliendo il calcolo del totale "tradizionale" e aggiungendo alla modalità col pattern l'elenco degli elementi acquistati.
Nel main ci sarebbe infatti anche
codice:
System.out.println("Totale = " + carrello.getTotale());
Carrello.java eccolo qua:
codice:
import java.util.List;
import java.util.ArrayList;


class Carrello {
    private List<ElementiCarrello> elementi;
    
    public Carrello() {
        elementi = new ArrayList<>();
    }
    
    public void add(ElementiCarrello elemento) {
        elementi.add(elemento);
    }
    
    // funziona ma poco "realistico", si complica se si vogliono introdurre offerte su alcuni tipi di articoli
    public double getTotale() {
        double totale = 0.0;
        for (ElementiCarrello e : elementi) {
            totale += e.getPrezzo(); // da Libro.java e DVD.java
        }
        return totale;
    }
    
    public List<ElementiCarrello> getElementi() {
        return elementi;
    }
}
Il pattern non c'entra col problema, infatti nel titolo della discussione parlo dell'add() di ArrayList.
Il pattern è stato il pretesto per produrre questo codice, il discorso pattern sarebbe esaurito se riuscissi a passare i titoli oltre ai prezzi.