Je pense qu'effectivement le clone à chaque appel est de trop, comme l'a pointé Chris, il faudrait beaucoup de re-use pour que ça soit intéressant.
Faire le clone à la main est plus approprié.
En fait, je me demande si ça a un réel intérêt pour de l'initialisation. On vire le clone et on obtient une façon propre et élégante de déclencher des traitements sur un objet.
On retournerait this à chaque appel, ça ferait juste du code plus lisible
humain.mange(fruit).boit(eau).dort(5);
au lieu de
humain.mange(fruit);
humain.boit(eau)
humain.dort(5);
C'est plus lisible et je me demande si la VM n'est pas capable de gratter un peu en voyant qu'on se trouve toujours sur la même référence.
Mais je suis d'accord, le coup des clones était une idée à la con.