Non penso che costruire le modalità di interazione come diversi "controller" ti serviranno bene. Qual è la tua logica per questo? Un controller serve per legare la visualizzazione e l'input dell'utente al modello, ma immagino che questa sia solo una tela e un puntatore del mouse, quindi perché i multi-controller?
Si potrebbe avere la logica di commutazione che cambia tra le modalità di interazione in una classe del modello. Probabilmente non dovresti aver bisogno di usarlo in più di un controller, a meno che tu non stia dando al tuo utente drasticamente diversi elementi di tipo "canvas" e layout da disegnare anche. Ad ogni modo, penso che alcune buone scelte di Design Pattern siano una fabbrica e / o un decoratore o qualcosa di simile.
Raccogli l'evento dal pulsante fai clic sulla tavolozza delle modalità di interazione (vuoi dire che si tratta di una sorta di tipo di barra di Photoshop / Paint di MS sul lato, giusto?). Usa quell'evento come input per una fabbrica. Questo factory genererà un'istanza di qualcosa che aderisce all'interfaccia "Strumento" (o qualsiasi altra cosa si voglia chiamare). L'istanza dello strumento appena generata è memorizzata nel controller da qualche parte per essere pronta a ricevere l'input del mouse, come ad esempio l'utente disegna.
Se vuoi diventare complesso, ad esempio se alcuni strumenti possono essere scelti contemporaneamente, come un "blocco magnetico" e un "draw", il riferimento del controller a un'istanza che implementa un'interfaccia Tool dovrebbe essere esteso in fase di runtime in qualche modo, come w / un modello Chain Of Responsibility (o un decoratore come accennato in precedenza). Ora la fabbrica menzionata in precedenza farà più di un utensile. Il controller li "allinea tutti" nel caso della catena di comando prima di passare l'input del mouse dell'utente. Ad esempio, l'implementazione "Tool" del blocco magnetico potrebbe modificare leggermente l'input dell'utente per esistere su una linea guida prima di passarla "lungo la catena" allo strumento di disegno.