Erst mal generell ist das Visitor-Entwurfsmuster ein Verhaltensmuster und das Decorator-Entwurfsmuster ein Strukturmuster. Beim Visitor erledigst du die Instanzenübergabe dadurch, dass du durch eine visit-Methode seitens Visitors die Instanz des Besuchten verarbeitest, welche diese wiederum über eine eigene accept-Methode abgibt. Du konzentrierst dich somit nicht auf eine Instanz, sondern kannst sie bei jedem Aufruf wechseln. Beim Decorator hingegen übergibst du die Instanz eines Objektes an einen Decorator, welcher die gleichen Methoden wie das übergebene Objekt hat. Die Instanz des Objektes wird dann für diese Instanz des Decorators gespeichert und du rufst nun die Methoden dessen auf. Es sieht nun so aus, als würdest du das dekorierte Objekt aufrufen, obwohl du den Decorator aufrufst.