Quote Originariamente inviata da Gas75 Visualizza il messaggio
CarrelloTotale è istanziato dal main(), questa la classe di partenza (gli elementi andrebbero aggiunti da terminale e non da codice
codice:
        Carrello carrello = new Carrello();
        carrello.add(libro);
        carrello.add(dvd);
E cosa fa Carrello? Non l'hai postato.

Inoltre considera che in CarrelloTotale l'oggetto Carrello che il costruttore riceve poi NON viene usato.
codice:
class CarrelloTotale implements Visitor {
    private double totale;
    private Carrello carrello;   // ma poi questo NON viene usato nei metodi ....
    private ArrayList<String> titoli = new ArrayList<String>();
    
    public CarrelloTotale(Carrello carrello) {    // ok, riceve Carrello
        this.carrello = carrello;   // ok, assegna il Carrello
        this.totale = 0.0;
    }

quindi?

Quote Originariamente inviata da Gas75 Visualizza il messaggio
ma mi sto concentrando appunto sul pattern e mi sono arenato con i titoli):
Che c'entrano i pattern? Se ti riferisci all'approccio del Visitor in Libro/DVD, è solo un "girare" le chiamate in maniera differente. Ma in realtà non sarebbe nemmeno strettamente necessario.