Per mantenere le classi disaccoppiate sto utilizzando il modello di mediatore in questo modo:
class Mediator {
  constructor(canvas, selectionBox, undoManager) {
    this.canvas = canvas
    this.selectionBox = selectionBox
    this.undoManager = undoManager
  }
  addText(text) {
    this.canvas.addText(text)
    this.undoManager.captureUndo()
    this.selectionBox.update()
  }
  addImage(image) {
    this.canvas.addImage(image)
    this.undoManager.captureUndo()
    this.selectionBox.update()
  }
  // ... etc
}
man mano che vengono aggiunti sempre più metodi alla classe Mediator, non diventerà un oggetto divino?
In questo caso, come posso risolvere questo? Magari creare sub-mediatori che raggruppino le azioni e usino un mediatore genitore per coordinarle?
(*) Per la cronaca ho appena iniziato a utilizzare questo pattern e non sono sicuro di farlo correttamente.